現在我知道最混帳專家會馬上想到git rebase
,但我使用這個詞在更普遍的意義上的「重訂」:我有我的項目的結構如下:如何將嵌套的git倉庫合併到父倉庫,保留歷史記錄?
.
..
.git
tools
lib
src
.git
build
兩個.
和./src
目錄顯然是git
存儲庫,並且從字面上來說有很長的歷史和大量的提交。 .
中的存儲庫忽略src
目錄(這是它自己的回購)。
我剛剛意識到我只想在.
中追蹤所有包括源文件的單一回購,因爲坦白地說,構建系統隨着源代碼的發展而變得相當廣泛。
我的問題是,我不知道如何讓這個存儲庫保留歷史,現在是src
中存儲庫的一部分。它甚至有可能嗎?這就是'rebasing'的含義 - 如果./src/main.c
中的更改在某些N次提交中被./src/.git
跟蹤,那麼我想保留這些更改並將它們作爲新存儲庫./.git
的一部分。同樣的歷史,重新發布的文件路徑。
UPDATE
子樹合併是不是我要什麼別的東西,從我SO聚集。總之,它比我需要的要多得多。我只需要舊回購的內容,一起開發的所有分支以及所有提交,標籤等看起來好像它們始終是父回購的一部分。在本質上,唯一的變化是文件本身的路徑 - 在子回購跟蹤./main.c
之前,新的回購現在將跟蹤./src/main.c
,並且因爲我聽說過,git
跟蹤內容,而不是文件,然後更改文件路徑,如上所述和對這些路徑的引用應該是相當平凡的,正確的?
向谷歌詢問「子樹合併」,這就是你想要的。 – 2013-02-12 16:24:34
我剛剛至少花了一個小時,並得出結論,子樹合併和子模塊都不適合我。子樹合併不僅保留了歷史,而且還保留了舊的和新的回購之間的聯繫 - 而我的舊回購將被退役並被廢棄。子模塊沒有問題,因爲我的回購協議非常緊密。我發現以下答案是最適合我的,但我真的想合併**所有**分支,而不僅僅是主人:http://stackoverflow.com/questions/13040958/merge-two-git-repositories -without-breaking-file-history/14470212#14470212 – amn 2013-02-12 18:25:15