【问题标题】:git diff shows ^M with color ui truegit diff 显示 ^M,颜色为真
【发布时间】:2013-01-05 21:27:46
【问题描述】:

我修改了我的.gitconfig,使我在执行git diff时有一些颜色:

$ cat .gitconfig 
[color]
ui = true

我正在使用 ubuntu 机器,我使用 VIM 编辑了一些代码。编辑文件后执行git diff,一次使用ui=true,一次不使用ui=true

问题:在第一种情况下,我有 ^M 字符和编辑行的结尾。但是,在打开 color.ui 或使用 vimcatmore.. 查看被操纵文件时,我看不到这些。

【问题讨论】:

    标签: git vim


    【解决方案1】:

    这可能是编码问题。 'git diff' 命令正在执行 Vim,认为文件格式是 Dos。

    当您使用任何其他命令时,它会被正确识别为 Unix 文件。

    你可以试试: :set fileformat=unix 在你的 git diff 窗口中?

    我不确定这是根本原因,因为我没有看到带有 ui 选项的链接。

    【讨论】:

    • “git diff 窗口”到底是什么意思?我只是在 shell 中执行此操作,我没有得到任何特定的 vim 窗口。
    • 啊抱歉,我以为你在使用“vim diff”作为 git 的 diff 工具。所以如果你用Vim打开文件,能不能给出:set fileformat?的回复。请参阅vim.wikia.com/wiki/File_format 了解更多信息。
    • fileformat=dos。切换到unix 时,^M 消失。伟大的!我有一些副作用,不知何故我的所有代码都显示为已更改,但基本上这是我的问题的解决方案。谢谢!
    • 可能是您的编辑器之一,或者签入操作转换了文件的结尾行。尝试找到根本原因,因为您不想花时间转换文件格式。检查是否设置了 git autocrlf 设置。
    【解决方案2】:

    通过将core.whitespace 设置为cr-at-eol 为我解决了问题

    将行尾的回车视为行终止符(git-config docs)的一部分

    这可以添加到每个项目或全局 git 配置文件中,如下所示:

    [core]
        whitespace = cr-at-eol
    

    这解决了由于另一个非行尾更改而将 ^M 隐藏在差异中的行末尾的问题。目的不是忽略唯一区别是行尾的更改。我在带有core.autocrlf=true 的 Windows 上,因此预计行尾不匹配。

    我唯一要注意的是,我不知道这是否会影响 git 是否会标记 EOL 中可能想要提交的真正更改,但也许使用 autocrlf=true 时永远不会出现这种情况。

    here 描述了另一种解决方案,更有针对性(但稍微有点 hacky)。

    【讨论】:

    • 在您的帖子之后,这对我有用:git config --global core.whitespace cr-at-eol。我想有人可能会先做git config --global core.whitespace 看看它的设置。
    【解决方案3】:

    请查看 Github 优秀的“处理行尾”页面:

    https://help.github.com/articles/dealing-with-line-endings

    您可能想要设置 core.autocrlf 然后重新规范化您的存储库。

    【讨论】:

      猜你喜欢
      • 2015-07-26
      • 2010-12-25
      • 1970-01-01
      • 2011-07-12
      • 2013-04-01
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 2011-11-17
      相关资源
      最近更新 更多