当我在我的仓库中签出特定提交并立即执行操作时
git status
,有一个文件显示为已更改。如果我看一下
对于我的工作副本和索引/回购中的副本,它们是
确实不同。工作副本有回车,而我
怀疑索引/ repo中的副本没有它们,输出
来自repo SHA的git cat-file
确实拥有它们。事实上,如果我
将该输出重定向到文件并执行该文件的git hash-object
,
我得到了与工作副本相同的SHA。
对文件执行git checkout
不会改变任何内容,即它仍然是
在git status
中标记为已更改。试图检查另一个提交
失败,因为我的变化"该文件将被覆盖
查看。对文件执行git diff
不返回任何内容。
repo有一个.gitattributes
文件,该文件以* text=auto
!eol
开头。 repo中的每个文件都在.gitattributes
中明确列出
使用-text
,除了具有自发"更改"的文件。在我的机器上,core.autocrlf是假的。
这是在Windows上运行的。 Git版本是1.9.5.msysgit.1。
有谁知道这里会发生什么?这几乎就像是git 在结账时将CR添加到文件中,但不是"实现"那 当涉及到决定是否有局部变化时。
感谢您的任何见解。
答案 0 :(得分:1)
好的,所以我很确定我有这个想法。与我的观点相反,repo 中的文件中包含CR,因此与我的工作副本完全相同。但是,由于在* text = auto
中指定了.gitattributes
,因此" clean"版本git status
使用将剥离其CR,即在提交时。所以,git认为文件不同。
有一点需要注意的是,虽然我能够使用* text = auto
中的.gitattributes
使用测试存储库重现这一点,但如果我不这样做,我可以不重现它有这条线,即使将core.autocrlf设置为true。文档暗示行为应该是相同的,但显然不是这种情况。