2013-04-14 95 views
3

我們在GitHub上有一堆存儲庫,我們想要完全切換到另一個提供程序。我是Mercurial粉絲,所以我對Git分支並不十分熟悉,當克隆git倉庫時,您必須指定一個分支,否則它會克隆主分支(如果我在這裏並不完全錯誤)。如何將整個git存儲庫移動到其他位置?

更具體的一個例子,假設我們有一個名爲hello項目,有幾個分支(masterab)。我想移動它,然後繼續在新的存儲庫中工作,刪除原來的存儲庫。

所以我們有這個資源庫:

[email protected]:lipis/hello.git 

而且我們希望將其移動到:

ssh://[email protected]/lipis/hello 

因爲我們有超過40個不同的項目,其中許多人有不同的分支,我的問題是我怎樣才能將每個存儲庫(包括所有分支機構)全部移動到另一個存儲庫,而無需爲每個項目推送和推送單個分支?


將是不錯的有某種程序,如:

$ git clone [email protected]:lipis/hello.git 
$ cd hello 
# some black git magic that only Linus understands.. 
# continue working with the newest repository only 
+1

您正在切換的提供商應該爲此案提供說明 - 因爲GitHub將成爲他們的競爭對手,並且他們會經常遇到這個問題。 – GoZoner

+0

@GoZoner我不同意,像這樣的東西根本不是特定的GitHub。也許從另一個網站轉換,但不僅僅是GitHub。 – alternative

+1

@GoZoner雖然你可能是正確的..我想知道我該怎麼做我自己..因爲與mercurial你可以做到這一點,只需在「hgrc」中添加一行或只是推到任何網址,你有這一切..但沒有使用git :( – Lipis

回答

4

git clone並不克隆一個特定的分支,其複製所有這些,然後檢查出的主。

最簡單的方法是使用--mirror將存儲庫推送到新位置。你也可以從另一端克隆。你也可以複製文件夾。

爲了詳細說明如何git clone作品,假設我們從有分公司mastera,並且b存儲庫origin克隆。然後在新的存儲庫中,我們得到分支master,origin/master,origin/aorigin/b,我們可以像git branch a origin/a那樣分支,以在該新存儲庫中獲得我們自己的a副本。

github存儲庫推送可能很困難,因此您應該使用git clone --mirror(它會自動爲我們設置所有參考)。假設您可以完全訪問您的ssh服務器。如果沒有,您應該從第3臺機器登錄git clone --mirror,然後登錄git push --mirror登錄到ssh服務器。

+0

我有完整的ssh訪問所有的存儲庫,我只是想通過窯移動它們。所以要更具體一點,如果我們有這個hello項目,而且我的機器上沒有任何東西......從克隆到推動它的確切步驟是什麼?謝謝你的理論,但仍然令人困惑..因爲我想以某種方式自動化這個事情的40個項目..會很高興有一個程序:) – Lipis

+0

我更新了我的答案有點向你展示我的意思.. – Lipis

+1

@ Lipis'git clone --mirror '然後'git push - 鏡像'。 '--mirror'的原因是它確保所有的ref都被保留下來。然後,您需要重新配置您的'origin'遠程指向Kiln中的新存儲庫。 – alternative

相關問題