【发布时间】:2019-12-16 10:58:33
【问题描述】:
我得到了一个带有 LFS 的旧存储库,但是一些(可能是旧的)文件丢失了,所以我无法推送:
git push -u origin
Locking support detected on remote "origin". Consider enabling it with:
$ git config lfs.https://gitlab.com/gitlabaccount/repo.git/info/lfs.locksverify true
Unable to find source for object 43cb9e6d1d15bb8d31af911aa69a15a67174c5 (try running git lfs fetch --all)
Uploading LFS objects: 87% (600/691), 546 MB | 0 B/s, done
error: failed to push some refs to 'git@gitlab.com:gitlabaccount/repo.git'
据称我的同事运行了git lfs fetch --all,但并没有解决问题。
我真的很想要一份最新的、所有历史的副本,以及一个现在可以运行的版本。我并不真正担心旧文件,我的偏好是完成推送并丢失一些丢失的 lfs 文件,但 lfs 错误不会让我这样做。
Gitlab 将允许我在项目中禁用 lfs,但我不知道如果我这样做,大小/限制会发生什么。不确定在服务器或客户端上启用然后禁用它的正确过程是什么。或者,推送是否有“忽略丢失的文件”选项?
【问题讨论】:
-
我认为您不能禁用此检查。如果您没有这些 LFS 指针的文件,您将不得不重写项目的历史记录以不包含它们。
-
@bk2204 我已使用 bitbucket 的
for i inls;do echo $i; cd $i; git log --all -p -S 43cb9e6d1d15bb8d31af911aa69a15a67174c5; cd -;done将文件识别为在先前提交中来来往往但当前不存在的文件。像git filter-branch --force --tree-filter 'rm -f path/to/big_file.mpg' HEAD这样的东西就足够了吗? (community.atlassian.com/t5/Bitbucket-questions/…) -
如果所有丢失的 LFS 对象都是该路径的实例,那么是的,如果将
HEAD替换为--all就足够了。 -
@bk2204 请注意,对于
-- --all,替换可能应该是HEAD。此外,在这种情况下,显然有多个文件失败。我的想法是将新路径添加到rm -f file1 file2 file3命令