[英]How to recover a gitlab repository from a git bundle?
偶然,我從本地存儲庫強行推送到具有鏡像活動狀態的GitLab存儲庫,然后刪除了遠程中所有隱藏的和與GitLab相關的refs(對於合並請求'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
在BROKEN中運行cd並運行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
情況下--dry-run
以修復遠程存儲庫。 它可能會報告有關remote rejected
但是只要它們來自“ keep-around
引用”組,您就可以放心地忽略它們。 您還需要重新打開GitLab中該存儲庫的所有自動關閉的合並請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.