Git LFS 总是显示已更改的图像文件?
Git LFS always shows image files as changed?
我刚刚为一个项目设置了 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
我不确定我应该采取哪些其他步骤来诊断问题。还有其他人 运行 参与其中吗?有任何想法吗?谢谢!
更新:
它实际上不是所有图像文件,只是其中的一个子集。但是只有图像文件显示了问题。
我尝试删除所有有问题的图像并推送该提交。然后在另一台机器上我添加了一些文件并再次推送。当我提取新的更改时,我遇到了同样的问题:文件立即显示为已修改。这些文件在磁盘上看起来是正确的,实际上与原始文件相同。
D'oh…在从网络上的各种机器上多次签入和取出以及推送和拉取之后,我们发现了一个 git lfs install
在本地工作副本上没有 运行 的地方。所以它推送原始二进制文件而不是 LFS 文本记录。
要修复它,我们必须 运行 init 命令,然后提交并推送所有损坏的文件(在验证我们已经暂存 LFS 文本记录而不是图像本身之后)。
希望 LFS 可以在某个时候捆绑到 Git 发行版中并避免这个问题。
我有过类似的 LFS 跟踪文件总是显示差异的症状。在我的例子中,文件存储在 LFS 中,但缓存中的文件似乎已损坏。如果您查看 .git/lfs/objects/
,数据文件由 sha256 存储。如果你 运行 sha256sum
在一个文件上,它应该具有与其名称相同的哈希值,在我的例子中它们是不同的。
您可以通过 运行ning 解决此问题:
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
我刚刚为一个项目设置了 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
我不确定我应该采取哪些其他步骤来诊断问题。还有其他人 运行 参与其中吗?有任何想法吗?谢谢!
更新:
它实际上不是所有图像文件,只是其中的一个子集。但是只有图像文件显示了问题。
我尝试删除所有有问题的图像并推送该提交。然后在另一台机器上我添加了一些文件并再次推送。当我提取新的更改时,我遇到了同样的问题:文件立即显示为已修改。这些文件在磁盘上看起来是正确的,实际上与原始文件相同。
D'oh…在从网络上的各种机器上多次签入和取出以及推送和拉取之后,我们发现了一个 git lfs install
在本地工作副本上没有 运行 的地方。所以它推送原始二进制文件而不是 LFS 文本记录。
要修复它,我们必须 运行 init 命令,然后提交并推送所有损坏的文件(在验证我们已经暂存 LFS 文本记录而不是图像本身之后)。
希望 LFS 可以在某个时候捆绑到 Git 发行版中并避免这个问题。
我有过类似的 LFS 跟踪文件总是显示差异的症状。在我的例子中,文件存储在 LFS 中,但缓存中的文件似乎已损坏。如果您查看 .git/lfs/objects/
,数据文件由 sha256 存储。如果你 运行 sha256sum
在一个文件上,它应该具有与其名称相同的哈希值,在我的例子中它们是不同的。
您可以通过 运行ning 解决此问题:
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