2011-12-16 44 views
1

假設我有一個超級項目包含N個子模塊。我在本指南中創建了以下內容:Git Submodule TutorialGit分佈式工作流程子模塊

因此,我爲所有子模塊公共存儲庫加上超級項目的公共存儲庫,所有這些都在遠程主機上:machine1/path/to/public/repos.git。這些我會打電話給我的公共回購。

現在,用戶X克隆了我公開回購的超級項目,並將所有內容都提交給了他的私人回購。他當地的.git/config.gitmodules中的所有參考文獻指向了我的公開回購。

我想用戶X擁有自己的公共倉庫,所以我們可以使用下面介紹的分佈式工作流:Git Distributed Workflows

這樣用戶X,我可以把我們的地方改變我們自己的公共回購和再拉從變化彼此的公共回購。我想避免我們兩個必須推到相同的公共回購。

由於X的當地回購中的.gitmodules指向我公開回購,因此X需要更改ulr,以便他們指向其公共回購。請記住,.gitmodules已提交,所以如果X提交&在修改它以引用其公共回購後發佈.gitmodules,則會遇到衝突,然後從他的公共回購中提取更改(我的本地.gitmodules將引用他的公共回購,而不是我的這是不是所需的結果)。

那你覺得這是最好的選擇:

  • 從資源庫中的樹刪除.gitmodules並將其添加到.gitignore所以它不再跟蹤。
  • 保持.gitmodules不分配。我不知道爲什麼,但這在我看來是一個壞主意。
  • 使用git --update-index assume-unchanged .gitmodules

所有這些選項都具有以下缺點:.gitmodules將被消滅,如果一個運行git clean或丟棄所有未跟蹤文件。

我該如何保留X的.gitmodules中的更改以永久引用他自己的公共回購協議,而不必擔心會意外擦除配置或引起不必要的更改?

回答

1

您可以通過向您的子模塊添加額外的遙控來實現此目的。此外,添加--init選項時,僅包含repo的git子模塊遠程URL纔會同步。沒有什麼是阻止你做一個git子模塊添加,更新,初始化,然後更改該遠程的回購中的URL。除非添加--init選項,否則後續子模塊更新不會更改該URL。

+0

對不起,我花了這麼長時間才接受這個答案,現在我第一次看到它,我不明白,現在看起來很明顯。 – 2014-02-04 05:29:53