在Windows上进行开发但在UNIX Docker容器上运行时出现换行符问题。

15 浏览
0 Comments

在Windows上进行开发但在UNIX Docker容器上运行时出现换行符问题。

我的团队正在构建我们的第一个基于Docker的.NET应用程序,并编写了一个作为构建过程的一部分运行的bash脚本(来自Dockerfile)。我们都使用Windows 10机器。\n当bash脚本运行时,抛出一个错误:\n/bin/bash^M:bad interpreter:No such file or directory。\n根据我的研究,这似乎是因为行尾是Windows行尾,而不是基于UNIX的。我通过使用Notepad++转换行尾来解决了这个问题,脚本运行正常。然而,当我进入SourceTree查看更改的文件时,它短暂地显示为更改的文件(并显示无法检测到更改的信息)。一旦我点击\"stage file\"按钮,它就消失了,好像没有任何更改的文件。\n我该如何解决这个问题?我在GIT中看到了一个行尾设置,但不确定正确的设置应该是什么。

0
0 Comments

在Windows上开发时,如果在UNIX的Docker容器上运行,可能会遇到换行符问题。这个问题的原因是Windows和UNIX使用不同的换行符:Windows使用回车和换行(CRLF),而UNIX使用换行(LF)。

要解决这个问题,可以在存储库的顶部添加一个名为.gitattributes的文件,并将以下内容添加到文件中:

* text=auto

*.sh text eol=lf

*.conf text eol=lf

这样可以告诉Git在检出文件时自动转换换行符。第一行* text=auto表示对所有文件自动进行换行符转换。接下来的两行*.sh text eol=lf*.conf text eol=lf表示对以.sh和.conf结尾的文件进行换行符转换,并将其转换为LF。

通过这种方式,可以确保在Windows上开发时,生成的文件具有正确的换行符格式,以便在UNIX的Docker容器上运行时不会出现问题。

参考来源:Source

0
0 Comments

问题出现的原因是在Windows上开发时,使用UNIX的docker容器运行时,会出现行尾符的问题。Windows的文本编辑器在行尾会加上特殊字符来表示换行。这些字符在Linux服务器上的某些应用程序中无法识别,可能会导致服务无法正确响应。

解决方法是使用dos2unix工具。dos2unix会移除你遇到的Windows隐藏字符(^M)。

如果你的Linux机器上还没有安装dos2unix,可以使用以下命令进行安装:

apt install dos2unix

然后在有问题的文件上运行dos2unix命令:

dos2unix your_problematic_file.txt

感谢回答,但我的问题实际上不是如何转换行尾符的。我知道如何做到这一点。我的问题是,我们在Windows机器上进行开发,所以我转换了行尾符,但GIT不会识别文件已经更改,以便我可以将其提交供其他开发人员使用。

0
0 Comments

问题:在Windows上开发,但在UNIX Docker容器上运行时出现换行符的问题。

原因:

在Windows和UNIX系统中,换行符的表示方式不同。Windows使用回车符(CR)和换行符(LF)(\r\n),而UNIX使用换行符(LF)(\n)。因此,在Windows上开发的代码文件在UNIX系统上运行时可能会出现换行符不兼容的问题。

解决方法:

1. 使用.gitattributes文件来设置文件的换行符。可以在该文件中指定哪些文件需要使用哪种换行符。

2. 在.gitattributes文件中使用以下语法设置换行符:

- 对于需要使用Windows换行符的文件,在.gitattributes文件中添加以下行:`*.txt eol=crlf`

- 对于需要使用UNIX换行符的文件,在.gitattributes文件中添加以下行:`*.sh eol=lf`

3. 在使用git命令进行代码提交时,Git会根据.gitattributes文件中的设置自动转换换行符。

更多信息请参考:文档链接

0