【问题标题】:`git add` adds ^M to the end of every line`git add` 将 ^M 添加到每一行的末尾
【发布时间】:2015-03-20 12:51:24
【问题描述】:

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

【问题讨论】:

  • 您的行尾处理配置错误。网站上有很多关于此的主题 - core.safecrlfcore.autocrlf 是您应该修复的设置。请注意,修复后您可能需要重新创建本地结帐。
  • 另外,请查看this
  • @eis 感谢您的建议,但 Blake 的回答确实有效
  • 是的,这也是解决问题的一种方法。还有其他的,例如为此使用 .gitattributes。每个都有自己的特点和缺点。

标签: git vim special-characters newline add


【解决方案1】:

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

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

【讨论】:

  • 之前可能在 Windows 上编辑过!这是路线.rb。该配置是否完全忽略 ^M 或者它在暂存时实际上没有插入它们,即 git-adding?
  • 它导致 ^M 只是不显示,但它仍然存在于文件中。
  • @Abdollah 在那里获得 +1。 ^M 仍然存在。对我来说,这个修复比疾病更糟糕。我有 ^M 导致合并冲突,但它们现在对我来说是不可见的。布莱赫。
【解决方案2】:

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

希望这对某人有所帮助!

core.autocrlf

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

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

$ git config --global core.autocrlf true

【讨论】:

    【解决方案3】:

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

    $ git config --global core.autocrlf input
    

    【讨论】:

      猜你喜欢
      • 2012-03-02
      • 1970-01-01
      • 2014-10-18
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2013-04-05
      相关资源
      最近更新 更多