Git - 自发"变化"在签出提交时工作目录

时间:2015-06-03 14:57:03

标签: git

当我在我的仓库中签出特定提交并立即执行操作时 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添加到文件中,但不是"实现"那 当涉及到决定是否有局部变化时。

感谢您的任何见解。

1 个答案:

答案 0 :(得分:1)

好的,所以我很确定我有这个想法。与我的观点相反,repo 中的文件中包含CR,因此与我的工作副本完全相同。但是,由于在* text = auto中指定了.gitattributes,因此" clean"版本git status使用将剥离其CR,即在提交时。所以,git认为文件不同。

有一点需要注意的是,虽然我能够使用* text = auto中的.gitattributes使用测试存储库重现这一点,但如果我不这样做,我可以重现它有这条线,即使将core.autocrlf设置为true。文档暗示行为应该是相同的,但显然不是这种情况。