我在Ubuntu 14.04。我正在用Vim编辑文件。突然,我开始注意到,我在git diff filename
中看到的更改在插入或更改的每一行末尾都包含了^M
。因此,在我将git add
运行到filename
之后,我在git diff --staged
中看到,每一行在末尾都有 ^M
,因此,如果我对整个文件(E 213
>即使我E 114
只更改了一行E 215
)进行了更改。请帮我理解一下这里发生了什么。
发布于 2015-01-21 13:09:30
您的文件在任何时候都是从Windows计算机签入吗?Windows将CR+LF
添加到行尾,而其他操作系统只使用LF
。如果您已经将core.autocrlf
设置为false
,那么git diff
将将CR字符突出显示为^M
。若要关闭此设置,可以更改core.whitespace
设置:
git config --global core.whitespace cr-at-eol
发布于 2018-06-08 03:08:42
这为我解决了这个问题,我引用以下资料来源:core.autocrlf解释
希望这能帮到别人!
core.autocrlf
如果您正在Windows上编程,并且与那些不是(或者反之亦然)的人一起工作,那么您可能会在某个时候遇到行结束问题。这是因为Windows对其文件中的新行使用回车字符和行提要字符,而Mac和Linux系统只使用linefeed字符。这是一个微妙但令人难以置信的跨平台工作的事实;Windows上的许多编辑器默默地用CRLF替换现有的LF样式行尾,或者在用户点击enter键时插入两个行尾字符。
当您将文件添加到索引中时,Git可以自动将CRLF行尾转换为LF,反之亦然,当它将代码签出到文件系统时。您可以使用core.autocrlf设置打开此功能。如果您在Windows机器上,将其设置为true --这将在签出代码时将LF结尾转换为CRLF:
$ git config --global core.autocrlf true
发布于 2020-12-26 00:51:32
当我将整个项目直接从Windows复制到Linux时,我也遇到了类似的问题。对于这个文档,我在Linux终端上运行了以下命令,问题得到了解决:
$ git config --global core.autocrlf input
https://stackoverflow.com/questions/28076760
复制