簡體   English   中英

如何從git bundle恢復gitlab存儲庫?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM