val*_*alk 8 git vim newline add special-characters
我在 Ubuntu 14.04 上。我正在用Vim编辑文件。突然间,我开始注意到我所做的更改git diff filename包含^M在我插入或更改的每一行的末尾。所以,当我跑git add的filename我看到git diff --staged的是每行有 ^M 在年底,因此它就像如果我做了一个改变整个文件,即使我改变了只有一行。请帮助我了解这里发生了什么。
dap*_*apc 10
这为我解决了这个问题,我引用以下来源:core.autocrlf解释
\n\n希望这对某人有帮助!
\n\n核心.autocrlf
\n\n如果您在 Windows 上编程并与非 Windows 上的人一起工作(反之亦然),您可能会在某个时候遇到行结束问题。这是因为 Windows 在其文件中同时使用回车符和换行符作为换行符,而 Mac 和 Linux 系统仅使用换行符。这是跨平台工作中一个微妙但极其烦人的事实;Windows 上的许多编辑器会默默地用 CRLF 替换现有的 LF 样式行结尾,或者在用户按 Enter 键时插入两个行结尾字符。
\n\n当您将文件添加到索引时,Git 可以通过自动将 CRLF 行结尾转换为 LF 来处理此问题,反之亦然。您可以使用 core.autocrlf 设置打开此功能。如果您在 Windows 计算机上\xe2\x80\x99re,请将其设置为 true \xe2\x80\x93,这会在您签出代码时将 LF 结尾转换为 CRLF:
\n\n$ git config --global core.autocrlf true\nRun Code Online (Sandbox Code Playgroud)\n
您的文件是否随时从 Windows 计算机签入?Windows 添加CR+LF行尾,而其他操作系统LF仅使用。如果您已经设置core.autocrlf到false,然后git diff将突出CR字符^M。要关闭此功能,您可以更改core.whitespace设置:
git config --global core.whitespace cr-at-eol
Run Code Online (Sandbox Code Playgroud)
当我将整个项目直接从 Windows 复制到 Linux 时,我遇到了类似的问题。关于此文档,我在 Linux 终端上运行了以下命令,问题得到解决:
$ git config --global core.autocrlf input
Run Code Online (Sandbox Code Playgroud)