当我搜索时,我没有看到unix方面的这个问题,只是因为Unix / MS不兼容。
就我而言,在编辑现有源代码(在emacs中)和暂存提交之后,git diff
或git format-patch
生成的输出将回车符(^ M)放在每个末尾。我添加的行。
例如,我运行git diff master --cached > patch.patch
。使用emacs或vim查看文件会在每行代码的末尾显示^M
。另一方面,角色在nano,less或cat中不可见。如果我运行git diff master --cached
,则在已启动的较少程序中,{I}个字符在我添加的每行代码后都可见,但不会在源代码中显示。
如何解决此问题?我使用的是CentOS 6,emacs 24.5.1和git 2.1.0。
答案 0 :(得分:0)
core.autocrlf
如果你在Windows上编程并与没有(或反之亦然)的人一起工作,你可能会在某些时候遇到行结束问题。这是因为Windows对其文件中的换行使用回车字符和换行符,而Mac和Linux系统仅使用换行符。这是跨平台工作的一个微妙但令人讨厌的事实; Windows上的许多编辑器默默地用CRLF替换现有的LF样式行结尾,或者当用户点击回车键时插入两个行结束字符。
当您将文件添加到索引时,Git可以通过将CRLF行结尾自动转换为LF来处理此问题,反之亦然,当它将代码签出到您的文件系统时。您可以使用core.autocrlf设置打开此功能。如果您使用的是Windows计算机,请将其设置为true - 这会在您签出代码时将LF结尾转换为CRLF:
$ git config --global core.autocrlf true
如果您使用的是使用LF行结尾的Linux或Mac系统,那么您不希望Git在您签出文件时自动转换它们;但是,如果意外引入了CRLF结尾的文件,那么您可能希望Git修复它。您可以告诉Git在提交时将CRLF转换为LF,但不是通过将core.autocrlf设置为输入来反转:
$ git config --global core.autocrlf input
此设置应该会在Windows签出中留下CRLF结尾,但在Mac和Linux系统以及存储库中的LF结尾。
如果您是Windows程序员,只执行Windows项目,那么您可以关闭此功能,通过将配置值设置为false来记录存储库中的回车:
$ git config --global core.autocrlf false