我在Ubuntu 14.04 linux上的一个git repo中添加了一些二进制文件,将这些文件推送到GitHub远程,然后将它们拉到OS X上的现有克隆El Capitan和Windows 10. git status在OS X上,Windows显示其中一些文件已修改为尽管他们没有被触动过.它继续显示它们即使在git reset --hard和之后也发生了变化git checkout.
注意,我正在使用带有这些文件的Git LFS(大文件存储).
以下是git diffOS X上的输出,其中只有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
Run Code Online (Sandbox Code Playgroud)
和
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
Run Code Online (Sandbox Code Playgroud)
文件已标记-text,.gitattributes因此EOL标记不应出现任何问题.还有什么可能导致不同的sha1结果和git diff报告二进制文件有什么不同?
我添加了一个diff=bin到.gitattributes了*.a那里的文件bin使用textconv = hexdump -v -C.在此git diff报告之后没有差异但git status仍显示文件已修改.
作为一个额外的测试,我将原始的.a文件从linux复制到OS X并使用diff将其与我的git工作树中的副本进行比较.它们完全相同.git status在linux repo clone上报告我复制的工作树文件是未修改的.
有什么建议?
以下不再适用; 回购已按我的回答中所述修复.
你可以试试自己.回购和分支在GitHub上,网址为https://github.com/KhronosGroup/KTX/tree/incoming.显示OS X上的问题的文件是other_lib/linux/Release-x64/libSDL2main.a.下面的任何其他.a文件都没有问题other_lib/linux.
在Windows上,还有一些文件显示为已修改,包括一些在Linux上为符号链接的文件.我现在想专注于OS X案例,因为它更简单.
我解决了这个问题。它与 Linux 主机上的配置有关。感谢Edward Thomson提示我查看 git-lfs 配置。
git lfs init在 Linux 主机上运行,删除并重新添加二进制文件到那里的 repo 并推送到远程已经解决了这个问题。要将更新拉到 OS X 和 Windows 主机,我必须git reset --hard在它们上运行以重置回没有违规文件的提交。
我没有运行git lfs init,本以为这一步将是apt-get install. 这意味着文件实际上并未存储在 LFS 中,因为 Linux 主机上的污迹和清洁过滤器是无操作的,但该.gitattributes文件导致 OS X 和 Windows 主机在结账时运行 LFS 污迹过滤器。
| 归档时间: |
|
| 查看次数: |
3616 次 |
| 最近记录: |