【发布时间】:2015-12-29 02:35:02
【问题描述】:
我在 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(大文件存储)。
这是来自 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 结果和 git diff 报告的二进制文件不同?
我为*.a 文件添加了diff=bin 到.gitattributes,其中bin 使用textconv = hexdump -v -C。在此之后git diff 报告没有差异,但git status 仍然显示文件已修改。
作为附加测试,我将原始 .a 文件从 linux 复制到 OS X,并使用 diff 将其与我的 git 工作树中的副本进行比较。它们是相同的。 linux repo clone 上的git status 报告我复制的工作树文件未修改。
有什么建议吗?
以下内容不再正确;如我的回答中所述,回购已得到修复。
你可以自己试试。 repo & 分支在 GitHub 上https://github.com/KhronosGroup/KTX/tree/incoming。在 OS X 上显示问题的文件是 other_lib/linux/Release-x64/libSDL2main.a。 other_lib/linux下的任何其他.a文件都没有问题。
在 Windows 上,还有一些文件显示为已修改,包括一些在 Linux 上是符号链接的文件。我现在想专注于 OS X 案例,因为它更简单。
【问题讨论】:
-
你在 Mac 和 Windows 主机上正确配置了 git-lfs 了吗?
-
可能与访问权限有关:stackoverflow.com/questions/1580596/…