我正在將我們產品的源代碼組織成一堆不同的Git存儲庫。 (而我是Git的新手)。其中一些將通過子模塊在同一臺服務器上使用其他存儲庫。如果Git子模塊移動到另一臺服務器該怎麼辦?
據我所知,在GIT中的子模塊是一個指針到特定的在另一存儲庫提交和被定義爲:遠程子模塊的
- URL(例如GIT中://foo.com/git /lib.git)
- 克隆子模塊的倉庫變成一個子目錄(如包括我們所引用
的問題是,一個URL是貝因/富)
例如,假設我在git:// PrivateCompanyServer/repositories/*中存儲了存儲庫Super和Sub。 Super通過它的gitmodules文件引用Sub:git://PrivateCompanyServer/repositories/Sub.git。有幾個開發人員向Super提交了數百個提交 - 幾乎每個Super提交的提交都有一個包含該URL的gitmodules的快照。幾個產品版本都被標記了,並且各種分支都在gitmodules中有URL。現在,假設PrivateCompanyServer崩潰,我們將代碼移動到另一臺服務器。或者我們重新組織PrivateCompanyServer上的目錄結構。管他呢。現在我們已經有超過數百次的提交引用舊URL中的Sub存儲庫,而這個存儲庫已經不存在了。顯然,gitmodules文件可以在開發分支的頭部糾正,我們可以在那裏移動。但是出於維護的原因,我們可能需要返回各種舊的提交,並且他們都會引用舊的不再有效的URL。如何處理?
很明顯,這可以通過rebasing /「重寫歷史記錄」來解決,以便存儲庫中的所有gitmodules文件都有新的URL,但我認爲這不是一個選項,因爲Super中的每個提交都會得到一個新的提交ID。所有引用Super的東西,包括使用Super作爲子模塊和本地開發人員知識庫的「超級超級」項目都會破裂 - 正確嗎?
那麼處理這個問題的最好方法是什麼? 如果您在私有公司服務器上存儲一系列存儲庫(其中一些通過子模塊引用其他存儲庫),那麼當服務器更改名稱時會做什麼 - 因此會使gitmodules文件中的舊URL無效?
我能想到的唯一解決方法是從歷史上的每個提交方式製作「很多分支」,只是爲了容納正確的gitmodules。看起來這樣會造成很多混亂和麻煩。似乎必須有更好的方式 - 當然我錯過了一些東西?
通過搜索Google的git子模塊同步,我發現這個有用的問題增加了更多的信息:http:// stackoverflow。com/questions/913701/changing-remote-repository-for-a-git-submodule .....感謝您指引我走下正確的道路! –