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

`git add` adds ^M to the end of every line

我在 Ubuntu 14.04。我正在使用 Vim 编辑文件。突然我开始注意到我所做的更改 git diff filename 在我插入或更改的每一行的末尾包含 ^M 。所以在我 运行 git addfilename 我看到 git diff --staged 每一行都有 ^M 在最后,因此如果我对整个文件进行了更改,即使我只更改了一行 .请帮助我了解这里发生了什么。

您的文件是否随时从 Windows 计算机签入? Windows 将 CR+LF 添加到行尾,而其他 OS 仅使用 LF。如果您已将 core.autocrlf 设置为 false,则 git diff 会将 CR 字符突出显示为 ^M。要关闭此功能,您可以更改 core.whitespace 设置:

git config --global core.whitespace cr-at-eol

这为我解决了这个问题,我引用以下来源:core.autocrlf explained

希望这对某人有所帮助!

core.autocrlf

如果您在 Windows 上编程并与不是(反之亦然)的人一起工作,您可能 运行 有时会遇到行尾问题。这是因为 Windows 在其文件中同时使用回车符-return 字符和换行符作为换行符,而 Mac 和 Linux 系统仅使用换行符。这是跨平台工作的一个微妙但令人难以置信的恼人事实; Windows 上的许多编辑器默默地用 CRLF 替换现有的 LF 样式的行结尾,或者在用户按下回车键时插入两个行结尾字符。

当您将文件添加到索引时,

Git 可以通过自动将 CRLF 行结尾转换为 LF 来处理此问题,反之亦然,当它将代码签出到您的文件系统时。您可以使用 core.autocrlf 设置打开此功能。如果您使用的是 Windows 机器,请将其设置为 true – 这会在您签出代码时将 LF 结尾转换为 CRLF:

$ git config --global core.autocrlf true

当我将整个项目从 Windows 直接复制到 Linux 时,我遇到了类似的问题。关于这个 document,我 运行 在我的 Linux 终端上执行了以下命令,问题得到解决:

$ git config --global core.autocrlf input