为什么我的git commit将所有行都改为CRLF?

时间:2017-12-08 13:01:33

标签: git newline

我正在处理的项目有一个名为pom.xml的文本文件。查看历史记录,这个文件的每一行都以LF结尾......直到最近。

我在Windows上运行,当我安装git bash时,我选择在结帐时自动转换为CRLF并在提交时返回LF。我刚刚检查了如下:

git config core.autocrlf
true

问题是我最近的提交在提交中包含了CR字符,历史记录告诉我每一行都改变了。

我刚刚对不同的文本文件进行了一些更改,我可以正确地看到我的工作副本有CRLF,但是如果我查看历史记录它只显示为LF。因此,对于此提交,从CRLF到LF的转换已经起作用。如果这会产生影响,则此文件是.drl drools规则文件。我不明白为什么它会在一个场合起作用而在另一个场合起作用。这两个文件在以前的版本中一直使用LF。

我看了几个其他文件,发现我不是唯一一个遇到这个问题的人。某些其他.xml文件在某些​​时候从LF切换到CRLF。这弄乱了历史,所以我想解决这个问题。

修改

如果我查看包含此pom.xml更改的提交,我还创建了两个新的Java类。这两个都是使用CRLF提交的,因此提交中的每个文件都有不正确的行结尾。如果我在同一时间检查一个不同的提交,我可以看到所有文件(包括新旧Java类和.drl文本文件的混合)在提交时已经转换为LF。

1 个答案:

答案 0 :(得分:0)

我发现了问题。安装git bash时未正确设置core.autocrlf设置。因此git config core.autocrlf返回true,但git config --global core.autocrlf返回空白。

如果您只使用git bash,则可以选择此设置。但是,我在Eclipse中使用EGit进行了提交,这发现--global设置未设置并使用默认值false。这就是行为不一致的原因,通过git bash提交但不是通过Eclipse提交。

我通过设置全局设置来修复它:

git config --global core.autocrlf true

这使得提交的行为与我使用的任何工具无关,而且当我比较文件的两个修订版时,Eclipse也会表现。