我有一个项目,我们称之为 masterProjects/lfsTestRepo。我克隆 masterProjects/lfsTestRepo,运行
git lfs install
和 git lfs track *.rpm
然后我添加 .gitattributes 文件,提交并推送我的更改。
然后我将 repo 分叉到 myProjects/lfsTestRepo 中。然后我克隆 myProjects/lfsTestRepo,添加一堆文件,包括一些 rpm,添加、提交并推送我的更改。
然后我进入 gitlab,创建一个从 myProjects/lfsTestRepo 到 masterProjects/lfsTestRepo 的合并请求。在 gitlab 中一切看起来都很好,所以我们接受合并请求。
现在,当我尝试拉取或重新克隆 masterProjects/lfsTestRepo 时,我在尝试下载的第一个 rpm 文件上遇到了一个 Smudge 错误。如果我使用
git lfs install --skip-smudge
运行它,那么我会得到一个 [404] 服务器上不存在的对象,或者您没有访问它的权限。但是,如果我进入 gitlab 并导航到 masterProjects/lfsTestRepo 中的 rpm 文件,我可以通过 Web 界面下载 rpm 文件。
如果我再次 fork myProjects/lfsTestRepo,那一个就可以被克隆了。
还有什么我必须在本地配置的吗?我必须在 gitlab 中配置什么吗?从 repos 向上推送 lfs 文件时,gitlab 是否只是不工作?
听起来正在发生的事情是
masterProject
没有它应该拥有的LFS对象,特别是因为仅masterProject
repo的新克隆无法下载所有这些对象。
这听起来像是 Gitlab 中的一个错误。 Gitlab 应该处理通过合并添加的 LFS 对象。
你能试试这个吗:
myProjects/lfsTestRepo
到新目录。git lfs fsck
masterProject/lfsTestRepo
作为新遥控器:git remote add mproj [email protected]:masterProject/lfsTestRepo
myProjects/lfsTestRepo
推送到 masterProject/lfsTestRepo
回购:git push mproj master:temp/lfs-fix-push
(将
master
替换为您更改后的分支。)
push
should 将任何丢失的 LFS 对象上传到 masterProject/lfsTestRepo
仓库中。
您可以通过将该项目克隆到新目录来测试
masterProject/lfsTestRepo
中是否存在所需的 LFS 对象。
从来没有真正弄清楚这个问题,但为了解决它,我们设置了一个新服务器,安装了 Gitlab,导入了我们的备份,一切正常。
我唯一的猜测是,这与原始服务器运行时间太长有关,我认为 gitlab 在我们刚开始使用它时甚至不支持 LFS。因此,一定有一些东西从未真正正确升级过,但没有抛出任何错误,并且在我们最终开始尝试使用 LFS 之前都不是问题。