我在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.a
。other_lib/linux
下的任何其他.a
文件都没有问题。
在Windows上,还有一些文件显示为已修改,其中包括Linux上的符号链接。我现在想集中讨论OSX的情况,因为它更简单。
我解决了这个问题。这是Linux主机上的配置。感谢Edward Thomson提示我查看git-lfs配置。
在Linux主机上运行git lfs init
,删除&将二进制文件重新添加到那里的repo并推送到远程已经解决了这个问题。为了将更新拉到OS X和Windows主机,我必须在它们上运行git reset --hard
,以重置回提交,而不包含有问题的文件。
我没有运行git reset --hard
0,因为我认为这一步将是apt-get install
运行的脚本的一部分。这意味着这些文件实际上并没有存储在LFS中,因为Linux主机上的污点和干净过滤器没有操作,但.gitattributes
文件导致OS X和Windows主机在结账时运行LFS污点过滤器。