`git add`将^ M添加到每一行的末尾

时间:2015-01-21 21:02:59

标签: git vim special-characters newline add

我在Ubuntu 14.04上。我正在使用 Vim 编辑文件。突然间,我开始注意到我在{I}插入或更改的每一行的末尾都包含git diff filename所做的更改。因此,当我^M向[{1}}运行git add时,filename git diff --staged 最后因此,即使我只更改了一行,我就会对整个文件进行更改。请帮我理解这里发生了什么。

3 个答案:

答案 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