Git CRLF更改显示在git状态

时间:2014-06-11 20:37:32

标签: git

我知道有很多问题/答案与此类似,但是我找不到这个问题的具体答案。我们是一个.net商店,正在使用git。

我想在执行git状态时忽略对文件的CRLF(^ M)更改。在开发过程中,其他进程偶尔会修改文件并注入CRLF,最终导致它们在git状态完成时显示为已修改。我在.gitattributes文件中有“* text = auto”行,以便在checkout / commit处规范化行结尾,但这不是我要找的。我还尝试将以下内容添加到git配置(core.whitespace = cr-at-eol),但它们仍显示为已修改。

如何告诉git忽略对CRLF的所有更改(^ M)?

2 个答案:

答案 0 :(得分:3)

您无法忽略git status的文件更改类型。您可以使用 .gitignore 来忽略整个文件。您可以使用各种空白选项来转换提交的内容,突出显示的内容(红色)或在diff和commit视图中显示的内容。

您无法忽略这些文件更改的原因是:

  • 跟踪文件更改是版本控制的全部要点。
  • Git通过使用内容的SHA1哈希表示文件内容独立于路径。你的^ M影响那个SHA1,这使得它不可避免地显着。

简而言之,您可能需要修复其他流程或开发清理后处理。或者你可以使用:

git diff-files --name-status --ignore-space-at-eol

这不是状态的完美类似,但它可能足以满足您的需求。为方便起见,您甚至可以通过添加 .gitconfig 来构建git-alias'd“statusx”命令:

[alias]
    statusx = diff-files --name-status --ignore-space-at-eol

如果证明不合适,还有一些额外的空白选项:--ignore-space-change--ignore-all-space。有关详细信息,请参阅git diff --help

答案 1 :(得分:1)

您可以尝试测试-crlf文件中的.gitattributes属性:

*.cs -crlf

.gitattributes man page也提到-text,但这会使您的源文件成为二进制(无差异)。

否则,core.eol are directives用于控制eol风格 它更精确than core.autocrlf,即presented here