2017-10-13 75 views
3

我有了一個GIT回購在主機上的目錄開發主機pats1:在Git中,我的起源丟失了,如何將工作副本轉換爲新的起源?

~pats/gitrepos/myrepo.git 

回購持有一些自己編寫的腳本和開發工具,我克隆到其他盒子(說host1和host2),當我在其他主機上進行開發。我只是使用ssh克隆和推送更新;沒有使用github或「真正的服務器」。

我pats1箱死亡(硬盤VM被殲滅),我想知道採取什麼步驟來獲得新的替換回購通過從現有數據複製設置。

我想知道採取什麼步驟來轉換在host1或host2上設置一個pats2 myrepo的工作git的副本之一:gitrepos/myrepo.git成爲新的中央服務器,並指出現有的工作回購(在host1和host2上)到新服務器。

類似這樣的問題已經被問。有些是:

How to migrate GIT repository from one server to a new one

Convert a normal repo to a bare one

給出一些答案需要舊服務器是圍繞這不是我的選擇。以下是我認爲需要遵循的步驟:

(1)選擇其中一臺主機以創建新的「中央服務器(pats2)」。一個主機比另一個更好用嗎?

對於此示例,我將選擇host1

(2)確保在host1回購包含要複製的一切。

這篇文章Atlassian Developer Tip of Week - Copying a full git repo說要做到這一點,我想,以確保本地回購了所有的遠程分支的正道 /產地簽出,這樣,當回購克隆,樹枝都存在。

好吧,既然我的原始主機(pats1)不可用,我有可能未在當地的回購簽出遠程分支提供一些參考。 我相信當我複製使用基於什麼我讀,但無法找到的文章鏈接克隆的git這--mirror將自動清理。

因此,對於這一步,我堅持我在回購host1的東西,在我的情況是好的,因爲我只有一個主分支。 :-)

本文how-to-properly-mirror-a-git-repository說我應該刪除使用不存在的引用以及:

git fetch --prune 

注:此失敗時,我試了一下,因爲它無法訪問源。

(3)在host1上創建回購的鏡像。

ssh host1; cd proj 
git clone --mirror myrepo myrepo.git 

我用--mirror因爲How to properly mirror a git repository說:

而且混帳克隆--mirror是首選過了Git克隆--bare因爲前者還克隆git的筆記和一些其他屬性。

(4)repo.git(回購)複製到我的新的服務器(pats2):

ssh pats2 mkdir gitrepos 
scp -r myrepo.git pats2:gitrepos/ 

上面的命令將其放在正確的位置(〜PATS/gitrepos/myrepo git的),所以在未來我可以使用以下命令

git clone pats2:gitrepos/myrepo 

注克隆它:如果回購是大我可能要壓縮和解壓,以儘量減少網絡帶寬的焦油,例如tar czf - myrepo.git | mbuffer -s 1K -m 512 | ssh otherhost "cd gitrepos; tar zxf -"

(5)點都指向新的回購位置myrepo的工作副本(上pats2)的現有主機

ssh host1; cd proj/myrepo; 
git remote set-url origin pats2:gitrepos/myrepo.git 

Repeat above command for all hosts that were using the old "central1" host (pats1). 

我希望別人發現這個有用的和其他人可以確認我打算做的事情會奏效。

+0

「origin」只是* remote *的默認名稱。 –

回答

1

你的步驟似乎很好。

在5,你可以簡單地做:

cd proj/myrepo 
git remote set-url origin pats2:gitrepos/myrepo.git 

這將改變與origin相關的URL。

+0

感謝@VonC的改進。我已經更新了我的問題以反映這一點,並選擇此作爲答案。 – PatS

相關問題