我在Ubuntu 14.04上。我正在使用 Vim 编辑文件。突然间,我开始注意到我在{I}插入或更改的每一行的末尾都包含git diff filename
所做的更改。因此,当我^M
向[{1}}运行git add
时,filename
git diff --staged
最后因此,即使我只更改了一行,我就会对整个文件进行更改。请帮我理解这里发生了什么。
答案 0 :(得分:3)
您是否随时从Windows计算机检入了文件? Windows将CR+LF
添加到行结尾,而其他操作系统仅使用LF
。如果您已将core.autocrlf
设置为false
,则git diff
会将CR字符突出显示为^M
。要关闭此功能,您可以更改core.whitespace
设置:
git config --global core.whitespace cr-at-eol
答案 1 :(得分:1)
这解决了这个问题,我引用以下来源:core.autocrlf explained
希望这有助于某人!
<强> core.autocrlf 强>
如果你在Windows上编程并与没有(或反之亦然)的人一起工作,你可能会在某些时候遇到行结束问题。这是因为Windows对其文件中的换行使用回车字符和换行符,而Mac和Linux系统仅使用换行符。这是跨平台工作的一个微妙但令人讨厌的事实; Windows上的许多编辑器默默地用CRLF替换现有的LF样式行结尾,或者当用户点击回车键时插入两个行结束字符。
当您将文件添加到索引时,Git可以通过将CRLF行结尾自动转换为LF来处理此问题,反之亦然,当它将代码签出到您的文件系统时。您可以使用core.autocrlf设置打开此功能。如果您使用的是Windows计算机,请将其设置为true - 这会在您签出代码时将LF结尾转换为CRLF:
$ git config --global core.autocrlf true
答案 2 :(得分:1)
当我将整个项目直接从 Windows 复制到 Linux 时,我遇到了类似的问题。关于这个document,我在我的 Linux 终端上运行了以下命令,问题解决了:
$ git config --global core.autocrlf input