如何从git包中恢复gitlab存储库?

时间:2018-08-30 11:21:00

标签: git gitlab backup restore

由于意外,我强行从本地存储库推送到具有镜像活动状态的GitLab存储库,然后删除了远程中所有隐藏的和与GitLab相关的refs(对于合并请求'refs / merge-request')。

我告诉我的同事停止与远程存储库进行交互,并询问OP是否可以获取该存储库的每日备份。我收到了一个repositoryname.bundle文件。

现在如何使用此捆绑包文件恢复遥控器?

1 个答案:

答案 0 :(得分:0)

我是这样自己解决的。

创建一个临时目录并在其中cd

cd $(mktemp -d)

从您的存储库的OP(完整快照)中获取捆绑包

mv /tmp/yourrepo.bundle .

将损坏的存储库从GitLab复制到BROKEN

git clone --mirror URL_to_yourrepo BROKEN.git

cd在BROKEN中运行git bundle verify ../reponame.bundle。它不应报告任何错误,如果是,请继续

cd BROKEN.git
git bundle verify ../yourrepo.bundle

返回,然后从捆绑文件中克隆新的存储库

cd ..
cd git clone --mirror yourrepo.bundle LASTKNOWNGOOD.git

在那儿cd并确认您所有的裁判都在那里,就像您期望的那样

cd LASTKNOWNGOOD.git
git show-ref

现在将存储库设置为从GitLab远程到本地BROKEN克隆

git remote add BROKEN ../BROKEN.git

然后将此处的内容推送到BROKEN遥控器

git push --tags --force --mirror BROKEN

那时,应该修复BROKEN存储库。 cd进入BROKEN并模拟一次推送以验证它是否可以完成您期望的操作

cd ../BROKEN.git
git push --tags --verbose --dry-run --mirror origin

如果看起来像您期望的那样,请在没有--dry-run的情况下运行以修复远程存储库。 它可能会报告约remote rejected,但只要它们来自keep-around引用组,您就可以放心地忽略它们。 您还需要在GitLab中为该存储库重新打开所有自动关闭的合并请求。