GitLab推送错误:LFS对象丢失。

12

我已经使用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

我现在已经开始没有办法修复这个错误了。非常感谢任何帮助。

3个回答

11

最近GitLab引入自己的LFS支持后,我们的代码仓库发生了这种情况。如果您想继续使用自己的LFS,则必须进行一些痛苦的过程 - 您需要在每个代码仓库上禁用其自己的LFS支持,但似乎没有网页选项可供选择,您需要通过他们的命令行API来完成:

  1. 安装Python GitLab命令行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 <您的项目ID>

我们的一些开发人员报告称,即使如此也无法正常工作,他们不得不采用手动发送HTTP PUT请求到https://gitlab.com/api/v4/projects/<您的项目ID>?lfs_enabled=false,并将Private-Token标头设置为您的私有令牌。例如,使用CURL:

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

5
我不理解这个答案。"their own LFS" 和 "your own LFS" 是什么意思?为什么要从 GitLab 中删除 LFS?这个答案正在修复什么问题?请注意,我的翻译不包括解释或回答除翻译外的任何内容。 - user239558
2
历史上,GitLab没有提供LFS支持,因此许多人会在他们的仓库中设置自己的解决方案。这个答案允许您关闭新的GitLab LFS支持并继续使用自己的解决方案。 - mfj
4
现在有一个GUI设置可用。在项目设置->常规->权限->Git大文件存储下。https://docs.gitlab.com/ee/user/project/settings/#sharing-and-permissions - tech4him
禁用“Git大文件存储”帮助我解决了这个问题。谢谢tech4him。 - Prajwal

9

尽管我知道在我的GitLab仓库中没有任何LFS对象,但我仍然收到了这个错误。

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

解决方案是在gitlab项目设置中禁用Git Large File Storage (LFS)

设置 > 通用 > 可见性、项目特性、权限 > 展开 > Git Large File Storage (LFS)


6
这个命令对我很有帮助:
git lfs ls-files -l | awk '{ print $1 }' | xargs git lfs push --object-id origin

而且它比其他答案更快。


对我有用。还需要:git config lfs.contenttype false - Amir Gonnen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接