我在Ubuntu 14.04 linux上的git repo中添加了一些二进制文件,将这些文件推送到GitHub远程,然后将它们拉到OS X El Capitan和Windows 10上的现有克隆。在OS X和Windows上显示git status
其中一些文件已被修改,即使它们尚未被触及。即使在git reset --hard
和git checkout
之后,它仍会继续显示为已更改。
注意,我正在使用带有这些文件的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
文件在-text
中标记为.gitattributes
,因此EOL标记不应出现任何问题。还有什么可能导致不同的sha1结果和git diff报告二进制文件不同?
我为diff=bin
使用.gitattributes
*.a
的{{1}}个文件添加了bin
textconv = hexdump -v -C
。在此git diff
报告之后没有差异,但git status
仍然会将文件显示为已修改。
作为一个额外的测试,我将原始的.a文件从linux复制到OS X并使用diff将其与我的git工作树中的副本进行比较。它们完全相同。 linux repo clone上的git status
报告我复制的工作树文件是未修改的。
有什么建议吗?
以下不再适用;回购已按照我的回答中所述修复。
你可以尝试自己。回购& branch位于https://github.com/KhronosGroup/KTX/tree/incoming的GitHub上。显示OS X上的问题的文件是other_lib/linux/Release-x64/libSDL2main.a
。 .a
下的任何其他other_lib/linux
文件都没有问题。
在Windows上,更多文件显示为已修改,包括一些在Linux上为符号链接的文件。我现在想专注于OS X案例,因为它更简单。
答案 0 :(得分:4)
我弄明白了这个问题。它是在Linux主机上的配置。感谢Edward Thomson提示我查看git-lfs配置。
在Linux主机上运行git lfs init
,删除&将二进制文件重新添加到那里的repo并推送到远程已修复了问题。要将更新提取到OS X和Windows主机,我必须在它们上运行git reset --hard
以重置回提交而不会有违规文件。
我没有运行git lfs init
,因为我认为此步骤将成为apt-get install
运行的脚本的一部分。这意味着文件实际上并未存储在LFS中,因为Linux主机上的涂抹和清除过滤器都是无操作,但.gitattributes
文件导致OS X和Windows主机运行LFS涂抹过滤器结帐。