为什么二进制文件'git status'显示为已修改,而事实并非如此,并且文件模式相同



我在Ubuntu 14.04 linux上的git repo中添加了一些二进制文件,将这些文件推送到GitHub远程服务器,然后将它们拉到OS X El Capitan和Windows 10上的现有克隆中。OS X和Windows上的git status显示其中一些文件已修改,即使它们尚未被触摸。即使在CCD_ 2和CCD_。

注意,我正在使用Git LFS(大文件存储)与这些文件。

以下是OS X上git diff的输出,其中只有1个文件显示为已修改:

Marks-MacBook:KTX mark$ git diff other_lib/linux/Release-x64/libSDL2main.a
diff --git a/other_lib/linux/Release-x64/libSDL2main.a b/other_lib/linux/Release-x64/libSDL2main.a
index 4202f6f..2797199 100644
Binary files a/other_lib/linux/Release-x64/libSDL2main.a and b/other_lib/linux/Release-x64/libSDL2main.a differ

Marks-MacBook:KTX mark$ git diff --raw other_lib/linux/Release-x64/libSDL2main.a
:100644 100644 4202f6f... 0000000... M  other_lib/linux/Release-x64/libSDL2main.a

文件在.gitattributes中标记为-text,因此EOL标记不应存在任何问题。还有什么原因会导致不同的sha1结果和gitdiff报告二进制文件不同?

我为*.a文件添加了一个diff=bin.gitattributes,其中bin使用textconv = hexdump -v -C。在此之后,git diff没有报告任何差异,但git status仍然显示修改后的文件。

作为额外的测试,我将原始.a文件从linux复制到OSX,并使用diff将其与git工作树中的副本进行比较。它们完全相同。linux repo克隆上的git status报告我复制的工作树文件未修改。

有什么建议吗?

以下不再成立;正如我在回答中所描述的,回购已经固定

你可以自己尝试。回购&分支位于GitHub上https://github.com/KhronosGroup/KTX/tree/incoming.在OS X上显示问题的文件是other_lib/linux/Release-x64/libSDL2main.aother_lib/linux下的任何其他.a文件都没有问题。

在Windows上,还有一些文件显示为已修改,其中包括Linux上的符号链接。我现在想集中讨论OSX的情况,因为它更简单。

我解决了这个问题。这是Linux主机上的配置。感谢Edward Thomson提示我查看git-lfs配置。

在Linux主机上运行git lfs init,删除&将二进制文件重新添加到那里的repo并推送到远程已经解决了这个问题。为了将更新拉到OS X和Windows主机,我必须在它们上运行git reset --hard,以重置回提交,而不包含有问题的文件。

我没有运行git reset --hard0,因为我认为这一步将是apt-get install运行的脚本的一部分。这意味着这些文件实际上并没有存储在LFS中,因为Linux主机上的污点和干净过滤器没有操作,但.gitattributes文件导致OS X和Windows主机在结账时运行LFS污点过滤器。

最新更新