我已经将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-repository网址。
由于错误提示我尝试使用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
我现在开始没有关于修复此错误的想法了。 任何帮助将不胜感激。
答案 0 :(得分:5)
最近,当他们引入自己的LFS支持时,我们的GitLab存储库就发生了这种情况。如果你想继续使用你自己的LFS,那么这个过程非常痛苦 - 你需要在每个存储库上禁用它们自己的LFS支持,但是它似乎不是一个web选项,你需要这样做通过他们的命令行API:
pip install python-gitlab
将配置文件写入~/.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>
从设置网页顶部抓取您的gitlab项目ID
gitlab project update --lfs-enabled false --id <Your project id>
我们的一些开发人员报告说,即使这样做也没有用,他们不得不求助于向https://gitlab.com/api/v4/projects/<Your project id>?lfs_enabled=false
发送手动HTTP PUT请求,并将私有令牌标头设置为您的私人令牌。例如,使用CURL:
curl -X PUT --header "Private-Token: <private token>" -F "lfs_enabled=false" https://gitlab.com/api/v4/projects/<project id>
答案 1 :(得分:1)
尽管(据我所知)我的 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 大文件存储 (LFS)
答案 2 :(得分:0)
此命令对我有帮助:
git lfs ls-files -l | awk '{ print $1 }' | xargs git lfs push --object-id origin
而且比其他答案要快。