2012-03-20 19 views
9

我有兩個不相關的(不共享任何祖先檢查)Git倉庫,一個是超級倉庫,它包含許多較小的項目(讓我們稱之爲倉庫A )。另一個只是一個小型項目的臨時本地Git倉庫(讓我們稱之爲倉庫B)。從圖形上看,它看起來像這樣如何將兩個單獨的不相關的Git倉庫合併成一個具有單一歷史時間線的倉庫

A0-B0-C0-D0-E0-F0-G0-HEAD (repo A) 
A0-B0-C0-D0-E0-F0-G0-HEAD (remote/master bare repo pulled & pushed from repo A) 
A1-B1-C1-D1-E1-HEAD (repo B) 

理想情況下,我真的想回購乙合併到一個回購與一個單一的歷史時間表。所以這樣看來,我當初在回購A.圖形開工項目,這將是理想的最終結果

A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (new repo A) 
A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (remote/master bare repo pulled & pushed from repo A) 

我一直在做一些與子模塊和子樹(臨Git是一個相當不錯的書的閱讀方式),但他們似乎都迎合瞭解決方案,以維持兩個獨立的分支,子模塊能夠從上游拉動變化,而子樹略微減少頭痛。這兩種解決方案都需要額外的專用git命令來處理主和子樹/模塊分支之間的檢入和同步。這兩種解決方案都會導致多個時間線(使用--squash時,您甚至會得到3個單獨的時間軸)。

從SO最接近的解決方案似乎談論「graft」,但它是真的嗎?我們的目標是擁有一個統一的存儲庫,在這裏我可以推送/推入簽入,這樣就沒有更多的回購B了,最後只有回購A。

+0

可能重複http://stackoverflow.com/questions/1425892/how-do-you-merge-two-git-repositories ) – 2012-03-20 05:31:56

+0

@MichaelDurrant不,我拒絕子樹和子模塊解決方案,因爲情況不一樣 – Antony 2012-03-20 20:38:58

回答

5

我覺得你做這樣的:

  1. git的遠程添加[回購B]
  2. 混帳取//獲取回購B插入式回購一
  3. 由於要保留歷史像這樣: 您可以先選擇A0作爲起始點,然後選擇A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(從回購B)-HEAD(新回購A) 之後,一個接一個地使用git cherry-pick。

希望這對你有用。

BR, 添

的[你如何合併兩個git倉庫?(
+0

將您的解決方案與本指南結合在一起@ http://gbayer.com/development/moving-files-from-one-git-repository-另一個保存歷史/,它的工作原理! – Antony 2012-03-20 20:38:05

相關問題