LFS 上传丢失的对象,但文件在那里

LFS upload missing object but the file is there

我正在尝试推送提交。但我一直收到一条错误消息:

error: GH008: Your push referenced at least 1 unknown Git LFS object

它正在查询的文件是:

 (missing) SRP/com.unity.shadergraph/.data/texture_2d_lod_node.PNG (b262d71d68d478f6b6c3dc3086451a764e065b8608a65104e17cb8aefefa5f76)

现在我转到文件夹,发现该文件确实存在:

所以我的问题是为什么它一直给我这个错误?

LFS 对象存储中似乎缺少该对象。 LFS 对象位于 .git/lfs/objects。如果您丢失的对象在那里,它将位于 b2/62/d71d68...

之类的路径中

git-lfs 在暂存文件之前运行清理过滤器时添加对象。假设丢失的对象是文件的最新版本,您可以使用如下命令强制清理过滤器重新运行:

git add --renormalize path/to/file

该错误意味着您的 Git 推送包含对从未上传到服务器的 Git LFS 对象的引用。

尝试 运行 git lfs push origin --all 上传所有本地 Git LFS 对象。之后 git push 应该可以工作。


背景: Git LFS 的工作原理是将大文件存储在 Git 存储库之外的数据存储中。然后,单独存储的文件仅通过 Git 存储库中所谓的 Git LFS 指针文件进行引用(您可以在 Git LFS 101). If a Git LFS user has a misconfigured local client 中了解更多信息,然后可能会添加 LFS 文件并本地引用但未上传到 LFS 数据存储。因此,存储库的任何其他用户将无法下载引用的 LFS 文件,并且存储库将处于损坏状态。error: GH008: Your push referenced at least 1 unknown Git LFS object 保护用户免受那种情况。

当您从一个远程存储库迁移到另一个时,可能会发生这种情况。假设旧存储库被命名为 old-origin,

git lfs fetch --all old-origin
git lfs push origin --all

应该同步您 git 提交历史中的所有 LFS 对象。