【发布时间】:2014-10-24 05:48:52
【问题描述】:
当我似乎无法弄清楚更改时,Git 向我显示整个文件已更改。这是cygwin git,但它也发生在msysgit
$ git --version
git version 2.1.1
$ diff <(git show HEAD:File.cs) <(cat File.cs)
// Shows no differences
$ diff <(git show HEAD:File.cs | xxd) <(xxd File.cs)
// Shows no differences
$ git diff
// shows the entire file has changed
$ git hash-object <(git show HEAD:File.cs)
7b3762473342a5b040835bfef9f6b45c109ba48b
$ git hash-object <(cat File.cs)
7b3762473342a5b040835bfef9f6b45c109ba48b
$ git hash-object File.cs
7b3762473342a5b040835bfef9f6b45c109ba48b
我有
$ git config --get core.fileMode
false
和
$ git config --get core.autocrlf
true
我真的不知道发生了什么,一切都希望它们相同,但 git 想要创建一个提交,说明整个内容已被删除并重新创建。有谁更了解 git 管道的人有建议吗?我能想到的只是 git show 正在删除/标准化奇数行结尾。
更新:
我很确定它会发生,因为开发过程是这样的。从 git 结帐,rsync 到开发机器,开发,rsync 返回。我相信 rsync 弄乱了一些行尾。 gits 没有报告行尾,这很奇怪,而且似乎对到底发生了什么感到非常困惑。即使区分文件的二进制表示似乎是相同的。
更新 2:
所以这非常烦人,我觉得我偶然发现了 git 中的一个错误。
例如
$ git gc
$ git checkout -- .
$ git clean -fd
$ git status
> shows a heap of modified files
我很确定它应该不会显示任何变化,无论它在哪里运行,但我得到了一个包含 20 件奇怪事情的列表:(
【问题讨论】:
-
你对
git config --get core.autocrlf false也有同样的看法吗? -
是的,同样的事情。我什至确保使用
git rm --cached . -r和git reset --hard将其全部取消。然后我通过开发工具运行它,转到git status并得到整个文件已“更改”。我愿意接受我的过程正在更改文件(我想是行尾),但我希望 git 能够真正告诉我如何。这让我很困惑,尤其是考虑到哈希对象的输出是一样的。 -
你使用的是什么操作系统和git版本?
-
Cygwin,所以是 windows。具体 7. Git 版本是 2.1.1 如上面的代码块。一个有趣的旁注是,
git reset --hard或git checkout -- .不会删除此文件。所以 git 的那些部分认为文件没有改变并且不会覆盖磁盘上的内容,但是 diff 提交的一半会! :( -
您能在简单的 DOS 会话中尝试使用常规的 msysgit 1.9.4 吗?