2013-05-01 144 views
3

我有一個項目,其中包含幾個獨立的Git倉庫(合併幾個Maven項目,每個項目都有一個單獨的Git倉庫)。如何將N個git存儲庫合併爲一個保存歷史記錄?

現在我想創建一個Git存儲庫,並將每個存儲庫的內容放入其子目錄中,保留它們各自的歷史記錄(將多個Maven項目合併到一個多模塊Maven項目中)。

我該怎麼做?

我想答案適用於similar SO question

  1. 讓我們把個人信息庫P1 - PN和統一的數據庫U
  2. 創建存儲庫U
  3. Ugit checkout -b P1)中創建分支P1
  4. P1目錄中,運行命令git remote add U [email protected]:/U.git
  5. P1目錄中,git push U P1

當我這樣做,我得到以下錯誤在最後一步:

這樣的
error: src refspec ccplogic does not match any. 
error: failed to push some refs to '[email protected]:/U.git' 
+0

這個問題並不是同一個問題:你想合併這些樹。將所有對象拉入一個存儲庫是正確的事情,是的,但是然後您需要將樹結合在一起並將其作爲提交保存。我不確定是否有一種瓷器方式可以做到這一點,而管道方式是非常令人討厭的IIRC。推動步驟至少對你來說是錯誤的:沒有什麼可推動的。 – Rup 2013-05-01 14:13:56

回答

2

一種方式是通過將每個存儲庫作爲git submodule,但它的聲音,如果你想單代替倉庫。

您可以使用名爲git-subtree的腳本創建一個包含所有其他存儲庫的歷史記錄的存儲庫,該腳本現在是mainline git的一部分,儘管位於contrib目錄中。要安裝git-subtree script,請將其保存到PATH某處的名稱git-subtree。 (如果這個工作,然後git subtree應該給你一個用法消息。)

假設您創建了一個新的空倉庫的東西,如:

mkdir example 
cd example 
git init 
touch .gitignore 
git add .gitignore 
git commit -m 'Initial commit' 

然後對方庫,你可以這樣做以下(假設該庫是在URL git://wherever/whatever.git,你想它master分支出現在子目錄whevs):

git remote add whevs-remote git://wherever/whatever.git 
git fetch whevs-remote 
git subtree add --prefix=whevs whevs-remote/master 

然後爲對方reposit做同樣的ORY。

相關問題