如何从 git 包中恢复 gitlab 存储库?
How to recover a gitlab repository from a git bundle?
一不小心,我从本地存储库强行推送到镜像处于活动状态的 GitLab 存储库,然后删除了远程中所有隐藏的和 GitLab 相关的引用(对于合并请求'refs/merge-request')。
我告诉我的同事停止与远程存储库交互,并询问 OP 是否可以获得该存储库的每日备份。我收到了一个 repositoryname.bundle
文件。
现在如何使用这个捆绑文件恢复遥控器?
我是这样自己解决的
创建一个临时目录并 cd 到那里
cd $(mktemp -d)
从那里的存储库的 OP(完整快照)获取包
mv /tmp/yourrepo.bundle .
将损坏的存储库从 GitLab 克隆到 BROKEN
git clone --mirror URL_to_yourrepo BROKEN.git
cd in 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
到那时,损坏的存储库应该已经修复。
cd 进入 BROKEN 并模拟推送以验证它是否会执行您期望的操作
cd ../BROKEN.git
git push --tags --verbose --dry-run --mirror origin
如果看起来像您期望的那样,运行 没有 --dry-run
修复远程存储库。
它可能会报告 remote rejected
但只要它们来自 keep-around
refs 组,您就可以安全地忽略它们。
您还需要在 GitLab 中为该存储库重新打开所有自动关闭的合并请求。
一不小心,我从本地存储库强行推送到镜像处于活动状态的 GitLab 存储库,然后删除了远程中所有隐藏的和 GitLab 相关的引用(对于合并请求'refs/merge-request')。
我告诉我的同事停止与远程存储库交互,并询问 OP 是否可以获得该存储库的每日备份。我收到了一个 repositoryname.bundle
文件。
现在如何使用这个捆绑文件恢复遥控器?
我是这样自己解决的
创建一个临时目录并 cd 到那里
cd $(mktemp -d)
从那里的存储库的 OP(完整快照)获取包
mv /tmp/yourrepo.bundle .
将损坏的存储库从 GitLab 克隆到 BROKEN
git clone --mirror URL_to_yourrepo BROKEN.git
cd in 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
到那时,损坏的存储库应该已经修复。 cd 进入 BROKEN 并模拟推送以验证它是否会执行您期望的操作
cd ../BROKEN.git
git push --tags --verbose --dry-run --mirror origin
如果看起来像您期望的那样,运行 没有 --dry-run
修复远程存储库。
它可能会报告 remote rejected
但只要它们来自 keep-around
refs 组,您就可以安全地忽略它们。
您还需要在 GitLab 中为该存储库重新打开所有自动关闭的合并请求。