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

问题描述 投票:0回答:1

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

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

现在我如何使用此捆绑包文件恢复远程?

git gitlab backup restore
1个回答
0
投票

我这样解决了这个问题。

创建一个临时目录并在那里cd

cd $(mktemp -d)

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

mv /tmp/yourrepo.bundle .

将损坏的存储库从GitLab克隆到BROKEN

git clone --mirror URL_to_yourrepo BROKEN.git

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

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

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

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

在那里验证你所有的参考都是你想象的那样

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 refs组,你就可以放心地忽略它们。您还需要在GitLab中为该存储库重新打开所有自动关闭的合并请求。

© www.soinside.com 2019 - 2024. All rights reserved.