6

我刚刚为一个项目设置了 Git LFS,对于非图像文件(例如预编译库),它工作得很好。但是所有 .png 和 .jpg 文件都显示为始终修改,即使我尝试重置(git checkout --)它们。

这些条目看起来都一样.gitattributes

*.jpg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.so filter=lfs diff=lfs merge=lfs -text

的输出git diff并不是非常有用:

diff --git a/Design/faviconit/favicon.ico b/Design/faviconit/favicon.ico
index 3202014..b5d3daf 100755
Binary files a/Design/faviconit/favicon.ico and b/Design/faviconit/favicon.ico differ

我不确定我应该采取哪些其他步骤来诊断问题。有没有其他人遇到过这个?有任何想法吗?谢谢!

更新:

它实际上不是所有的图像文件,只是它们的一个子集。但只有图像文件显示问题。

我尝试删除所有有问题的图像并推送该提交。然后在另一台机器上,我添加了一些文件并再次推送。当我提取新的更改时,我遇到了同样的问题:文件立即显示为已修改。这些文件在磁盘上看起来是正确的,实际上与原始文件相同。

4

2 回答 2

8

D'oh……在网络上的各种机器上进行多次检查和推拉之后,我们发现了一个git lfs install没有在本地工作副本上运行的地方。所以它推送的是原始二进制文件而不是 LFS 文本记录。

为了修复它,我们必须运行 init 命令,然后提交并推送所有损坏的文件(在确认我们已经暂存了 LFS 文本记录而不是图像本身之后)。

希望 LFS 可以在某个时候被捆绑到 Git 发行版中并避免这个问题。

于 2015-12-22T12:33:57.677 回答
-1

我有类似的 LFS 跟踪文件的症状,总是显示出差异。在我的情况下,文件存储在 LFS 中,但缓存中的文件似乎已损坏。如果你查看.git/lfs/objects/数据文件是由 sha256 存储的。如果您sha256sum在文件上运行,它应该具有与其名称相同的哈希值,在我的情况下它们是不同的。

您可以通过运行来解决此问题: git lfs fsck

例如

$ git lfs fsck
Object MYPROBLEMFILE.data (9a963908a9b92d8c955dadbdb191d4d43f22d2a4c0e8dfadf1ce7c265d521f0b) is corrupt
  moved to .git/XXX/lfs/bad/9a963908a9b92d8c955dadbdb191d4d43f22d2a4c0e8dfadf1ce7c265d521f0b
$ git checkout master --force
Already on 'master'
Your branch is up-to-date with 'origin/master'.
$ git lfs fsck
Object MYPROBLEMFILE.data (9a963908a9b92d8c955dadbdb191d4d43f22d2a4c0e8dfadf1ce7c265d521f0b) could not be checked: no such file or directory
$ git lfs pull
Git LFS: (1 of 602 files) 33.72 MB / 74.49 MB                  
$ git lfs fsck
Git LFS fsck OK
于 2016-02-29T01:28:27.217 回答