git diff中没有区别,但由于行尾已更改,因此不应该有区别吗?

时间:2019-06-29 20:34:30

标签: git

我的问题可能来自对Git某些方面的误解。当我要处理由于Windows机器上的更改而在Mac上将CRLF更改为LF行结尾时,我想到了这个问题。

1)我首先在OSX上初始化一个新的存储库,然后将受CRLF行尾影响的所有文件放入其中。

2)第一次提交,因为设置了core.autocrlf = input,所以git自动将行尾更改为LF

我的本​​地工作树中的文件仍然具有CRLF行尾,但此处(How to normalize working tree line endings in Git?)也提供了解决方案:

删除索引中的文件,并根据上一次提交恢复索引+工作树:

git rm --cached -r .
git reset --hard

现在发生了混乱:我的第一次提交1)包含转换后的LF行结尾,而我的本地树和索引却没有。因此,我的期望是git应该显示出工作树/索引和存储库之间的差异。但是

git diff HEAD
git diff --chached

没有列出任何更改吗?

1 个答案:

答案 0 :(得分:1)

  

只要不进行重置(和删除索引),工作树仍具有CRLF行结尾。

不启用core.autocrlf = input:结帐部分(填充工作树)会将eol更改为系统eol。
参见此conversion table

提醒:切勿使用core.autocrlf:这是一种本地配置,适用于太多(即*全部)文件。
使用gitattributes core.eol directive:这是克隆的存储库中的设置部分,这意味着您不必在本地进行任何设置。

提醒:请勿rm /添加。使用Git 2.16 (Q1 2018) and more,您可以:

git add --renormalize .