首页 > 解决方案 > Git LFS“服务器上不存在对象”,因为它试图找到 LFS 未跟踪的旧文件?

问题描述

我在机器 1 上为扩展名“.pdf”设置了 LFS,并且在机器 2[404] Object does not exist on the server上针对特定文件“test.pdf”进行 git pull 时出现此错误。LFS 不会跟踪此文件,因为它是一个旧文件,并且即使与扩展名匹配,LFS 也不会跟踪 afaik 旧文件。

也许我错了,但我认为这是因为我在 origin/master 中有“test.pdf”文件,所以在我设置 LFS 之前我没有拉到机器 2 上。所以“git pull”试图寻找实际上不在 LFS 上的 test.pdf,因为它是 LFS 不跟踪的 master 上的旧文件。在这种情况下,我怎样才能成功 git pull?例如,只需在设置 LFS 之前将本地 repo 与提交更新日期,然后 git pull 所有 LFS 内容,就可以从原始机器 2 上获取此文件(我不介意它是否不在 LFS 上)。或者以某种方式手动将“test.pdf”添加到 LFS,如果这是最简单的选择?对不起,如果这没有意义。你会认为 git 能够处理这个问题,但它似乎正在发生,因为机器 2 中不存在 test.pdf 并且它很困惑,因为它不在 LFS 上(它不会

编辑:清晰度

标签: git-lfs

解决方案


当你使用 Git LFS 时,有一个远程,通常是origin,从中提取数据。此错误消息意味着当您签出有问题的分支时,应该下载的对象在服务器上不存在。通常这是因为没有人把它推到那里。如果您是自托管 LFS 服务器,则该对象可能已被删除或以其他方式丢失,但主要伪造不应该有这个问题。

如果您在另一个结帐中(例如在机器 1 上)有对象,您可以运行git lfs push --all以将任何对象推送到服务器,然后尝试 git lfs pull在另一台机器(机器 2)上执行 a。如果您在其他地方没有此对象,则数据将丢失。

通常你不需要手动推送 LFS 对象,因为钩子会自动安装,应该会为你做这件事。但是,如果您没有git lfs install在该机器上至少运行一次(或以其他方式正确设置过滤程序),则不会调用 Git LFS,也不会安装挂钩。


推荐阅读