GitLab push error: LFS objects are missing

GitLab push error: LFS objects are missing

我已经将 Git LFS 用于 GitLab 几个月了,没有任何问题,但最近在推送文件时返回以下错误:

$ git push origin master
Git LFS: (14 of 14 files) 8.88 MB / 8.88 MB
Counting objects: 54, done.
Delta compression using up to 6 threads.
Compressing objects: 100% (49/49), done.
Writing objects: 100% (54/54), 5.42 KiB | 0 bytes/s, done.
Total 54 (delta 15), reused 0 (delta 0)
remote: GitLab: LFS objects are missing. Ensure LFS is properly set up or try a manual "git lfs push --all".
To https://gitlab.com/<gitURL>.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://gitlab.com/<gitURL>.git'

其中 gitURL 是我的 git-存储库 URL。

正如错误提示的那样,我尝试使用 git lfs push --all 手动推送我的二进制文件,这给了我以下输出:

$ git lfs push --all origin master
Git LFS: (0 of 0 files, 1370 skipped) 0 B / 0 B, 1.77 GB skipped

这意味着我的所有本地文件都已成功存储在我的服务器上。

尝试获取所有 lfs 文件也能正常工作:

$ git lfs fetch --all
Scanning for all objects ever referenced...
* 1446 objects found
Fetching objects...

完成时没有任何错误。

此外,使用 git lfs fsck 检查所有 lfs 文件的一致性似乎也能正常工作:

$ git lfs fsck
Git LFS fsck OK

我现在开始 运行 没有关于修复此错误的想法。 任何帮助将不胜感激。

我们在 GitLab 上的存储库最近引入了自己的 LFS 支持时,就发生了这种情况。如果你想继续使用你自己的 LFS 那么这个过程是相当痛苦的 - 你需要在每个存储库上禁用他们自己的 LFS 支持,但似乎没有一个 web 选项,你需要通过他们来做命令行 API:

  1. 安装pythongitlab命令行API:pip install python-gitlab
  2. 为您的帐户设置一个私有的 gitlab 令牌,在您的帐户配置文件的访问令牌部分生成它。
  3. 写一个配置文件到 ~/.python-gitlab.cfg:

    [global]
    default = yourrepo
    ssl_verify = true
    timeout = 20
    
    [yourrepo]
    url = https://gitlab.com/
    private_token = <your API key from the settings tab on gitlab.com>
    
  4. 从设置网页的顶部获取您的 gitlab 项目 ID

  5. gitlab project update --lfs-enabled false --id <Your project id>

我们的一些开发人员报告说,即使这样也行不通,他们不得不向 https://gitlab.com/api/v4/projects/<Your project id>?lfs_enabled=false 发送手动 HTTP PUT 请求,并将 Private-Token header 设置为您的私人令牌。例如,使用 CURL:

 curl -X PUT --header "Private-Token: <private token>" -F "lfs_enabled=false" https://gitlab.com/api/v4/projects/<project id>

这个命令帮助了我:

git lfs ls-files -l | awk '{ print  }' | xargs git lfs push --object-id origin

而且比其他答案更快。

尽管(据我所知)我的 gitlab 存储库中没有任何 LFS 对象,但我还是收到了这个错误。

remote: GitLab: LFS objects are missing. Ensure LFS is properly set up or try a manual "git lfs push --all".

解决方案是在 gitlab 项目设置中禁用 Git 大文件存储 (LFS)

设置 > 常规 > 可见性、项目功能、权限 > 展开 > Git 大文件存储 (LFS)