2013-10-26 210 views
-1

我在尋找關於合併三個Git存儲庫的建議或警告。我需要維護提交歷史和所有分支。用一個父存儲庫替換三個Git存儲庫

我已經研究this questionthis question,它似乎像「混帳子樹」命令會做我想要什麼,但似乎這樣的命令已被刪除或東西(的評論似乎在這場衝突問題。)有一個「git子樹」命令,但我不確定它做了什麼,而且文檔很薄。

我有三個Git倉庫,每個倉庫都包含一個Maven項目。這些文件和資料庫不重疊的所有(沒有項目是其它任何的Git的子模塊,例如)。他們除了在B碼和C引用一個完全獨立的:

ProjectA.git 
    pom.xml 
    /src/.... 

ProjectB.git 
    pom.xml 
    /src/... 

ProjectC.git 
    pom.xml 
    /src/... 

我會喜歡把它們合併成一個「父」庫:

Parent.git 
    /ProjectA 
     pom.xml 
     /src/... 
    /ProjectB 
     pom.xml 
     /src/... 
    /ProjectC 
     pom.xml 
     /src/... 

我需要保持提交歷史與各分公司,但我沒有興趣在保持獨立的知識庫的子模塊或單獨回購。事實上,如果他們在這個過程之後離開,這樣會讓人們不想繼續使用它們。

這樣做最簡單和最可靠的方法是什麼?有沒有一種方法來訪問git-subtree命令(我正在使用Git 1.8.0在Windows 7上運行)還是在沒有該命令的情況下進行合併?

回答

2

我認爲git subtree可能是矯枉過正的這種用例,因爲你想只是不可逆轉地組合存儲庫。

首先,在每個現有存儲庫中,創建相關項目子目錄(projectA或其他),並使用git mv將現有文件和目錄移入其中。提交這些更改。然後依次檢查每個其他分支併爲每個分支重複該過程。

然後使用git remote add,git fetch然後git merge爲每對存儲庫中的每對相同命名分支。如果任何存儲庫中有任何唯一命名的分支,則需要將它們與master合併(使用-s ours-s theirs合併策略,具體取決於您是合併FROM還是TO)。否則,他們會非常奇怪,因爲他們會丟失2/3的項目(但可能這並不重要,因爲其他2/3rd仍然會在其他分支中)。

由於現在不存在衝突,所以這應該是正常的,並保留所有的歷史記錄。但是我還沒有嘗試過,所以不要一段時間刪除舊版本庫,以防萬一出錯!

+0

謝謝,我會試試這個(並且保留所有的備份)。 – user1071914

+0

標記答案正確! – MariuszS

+0

還沒試過呢! – user1071914

0

你在說什麼?按照第一個問題的示例代碼所述,通過輸入git subtree來運行git-subtree。

+0

是的,git子命令在手冊頁中被標記爲'git-commandname',因爲手冊頁名稱不允許有空格,就是這樣。但是,我認爲'git subtree'命令對於這個用例可能是過分的。 –

+0

對第一個問題的評論不同地說,「git-subtree」是(1)已停用(2)被包含在Git中,並且(3)已停用,但仍未包含在Git中。我真的不知道要相信哪一個,如果有的話。另外,對這個問題至少有三個截然不同的「答案」。我應該選擇哪一個?請記住,破壞公司的源代碼庫可能會讓你被解僱,這就是爲什麼我非常小心。 :-D – user1071914

+0

@ user1071914關於最後一點,顯然會做備份 - 因爲這是一個非常深的操作,在這種情況下,'git clone's離線 - 並仔細驗證。 – djechlin

相關問題