我只是为一个项目设置Git LFS,而对于非图像文件(例如预编译库),它工作得很好。但是,即使我尝试重置(git checkout --
)它们,所有.png和.jpg文件也会始终显示为已修改。
.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
我不确定我应该采取哪些其他措施来诊断问题。有没有其他人遇到这个?有任何想法吗?谢谢!
更新
它实际上不是所有图像文件,只是它们的一部分。但只有图像文件显示问题。
我尝试删除所有有问题的图片并推送该提交。然后在另一台机器上我添加了一些文件并再次推送。当我提取新的更改时,我遇到了同样的问题:文件立即显示为已修改。这些文件在磁盘上看起来是正确的,实际上与原件相同。
答案 0 :(得分:5)
D'oh ...经过多次检查和检查,并从网络上的各种机器推拉,我们发现在本地工作副本上没有运行git lfs install
。所以它推送原始二进制文件而不是LFS文本记录。
要修复它,我们必须运行init命令,然后提交并推送所有损坏的文件(在验证我们已经暂存了LFS文本记录而不是图像本身)。
希望LFS可以在某个时刻捆绑到Git发行版中并避免这个问题。
答案 1 :(得分:0)
我有一个LFS跟踪文件的类似症状总是显示差异。在我的情况下,文件存储在LFS中,但缓存中的文件似乎已损坏。如果你查看.git/lfs/objects/
,sha256会存储数据文件。如果你在一个文件上运行sha256sum
,它应该具有与它名称相同的哈希值,在我的情况下它们是不同的。
你可以通过运行来解决这个问题:
git lfs fsck
E.g。
$ 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