2011-10-05 52 views
4

我已經設法將來自多個GIT存儲庫的分支合併到一個新的存儲庫(使用「git filter-branch」和「git fetch/merge」的組合)。但我似乎無法「融合」來自這些分支的標籤......這甚至有可能嗎?就我所知道的(相當有限的)GIT而言,標籤指的是單個提交,它本身是由SHA1哈希值標識的,SHA1哈希值基本上是從所有先前的提交中計算出來的。由於來自不同儲存庫的分支沒有共同的祖先提交,我很難想象如何在一個新的和完全的情況下以一種仍然「有意義」(以GIT方式)重寫標籤的方式無關的存儲庫。在保留所有標記/分支的同時合併多個GIT存儲庫

任何想法?

編輯:爲了澄清我打算做的:

假設我有兩個倉庫,分別名爲「A」和「B」,我想結合成所謂的「C」一個新的存儲庫。

的目錄佈局是一樣的東西

 
A 
| 
|-someFileA 
|-anotherFileA 
|-... 
 
B 
| 
|-someFileB 
|-anotherFileB 
|-... 

,合併的倉庫應該像

 
C 
| 
|-A 
| |-someFileA 
| |-anotherFileA 
| |-... 
| 
|-B 
| |-someFileB 
| |-anotherFileB 
| |-... 
+1

存儲庫在文件結構和歷史方面如何相關?我的意思是他們分享什麼? – CharlesB

+0

這兩個存儲庫共享任何內容(一個存儲庫持有SQL來設置數據庫(模式,存儲過程等),另一個存儲庫存放將在後面訪問該數據庫的Java應用程序。由於Java代碼依賴於特定版本的數據庫模式,這是合理的結合這兩個存儲庫,以便可以在兩個模塊上創建一個標籤 – JavaGuy

+0

我認爲,爲了使任何答案更加完整,您需要(完全)定義您希望* history *看起來像,你可以做幾個子樹合併並完成,並且完全不相交A和B的歷史,但我懷疑你正在尋找某種交錯? – Cascabel

回答

2

標籤是不是目錄(如同在顛覆),所以取/合併將不會考慮他們。
加上git fetch默認不會獲取所有標籤(除非指定--tags)。

考慮到標籤引用了不可變的內容,並且您通過合併來修改該內容,我不認爲您可以輕鬆保留它們,除非您手動重新應用具有類似名稱的標籤來提交您認爲與原始標記相似的提交那些。


另一個不太侵入性的方式,以「結合」這兩個回購協議將宣告ABsubmodules of C
不涉及合併,AB保持他們的分支和標籤

+0

Hnm,這就是我已經懷疑的...也許我應該重新提出我的問題,並要求解決方案重新應用這些標籤:) – JavaGuy

+0

因爲我想結合我的倉庫(除其他外),以​​便能夠crea在所有模塊中添加一個標籤,GIT子模塊在這裏不會有幫助(因爲不支持跨模塊創建標籤)。 – JavaGuy

+0

@JavaGuy:不支持跨模塊創建標籤?爲什麼是,他們是......在某種程度上。當您標記父回購時,您將標記引用,該引用對當前由所述父回購引用的子模塊的確切提交進行標記。即使子模塊本身不知道該標籤,您也可以通過選擇父回購的正確標籤來獲得這兩種回購的準確提交。 – VonC

-1

如果你不想浪費了幾個小時就可以了,我通過Python和dulwich做了一些類似的怪異回購管理。這是一次黑客攻擊,但如果完成它值得幾個小時或一小段時間,那就去做吧。

相關問題