如果可能的話,最好確保了.gitmodules
文件包含任何人都可以克隆,通常是一個git://
或http://
URL庫的URL。然後有SSH訪問用戶自己可以在remote.origin.url
克隆後變成的子模塊,並更改URL指向一個SSH的網址與自己的用戶名,例如:
cd my-submodule
git remote set-url origin [email protected]:/pathtorepos
其他用戶應該能夠做到這一點,即使在目前的情況。 更新: Chris Johnsen指出,如果您省略用戶名並且存儲庫的所有用戶都具有SSH訪問權限,那麼在.gitmodules
中使用SSH URL也是合理的 - 他們需要添加他們的用戶名,類似於上述if它在本地和遠程有所不同。
請注意,.gitmodules
中的URL僅在初始化子模塊時使用。初始化子模塊會將主項目中的配置值submodule.<SUBMODULE-NAME>.url
設置爲.gitmodules
中提交的任何內容 - 這是將在第一個子模塊更新中使用的值。初始化和更新子模塊之間,你也可以改變這個網址將被用於該第一次更新的命令,如:
git config submodule.my-submodule.url [email protected]:/pathtorepos
事實上,你可能需要做,如果第一次更新失敗。一旦子模塊第一次更新,您需要更改的URL是在子模塊中爲origin
定義的URL - 此時,如果您可能正在刪除,則只在主項目中設置submodule.my-submodule.url
配置值並重新更新子模塊。
如果它們不包含用戶名(每個用戶名都有),那麼在'.gitmodules' **中使用基於SSH的URL是合理的最終用戶可以配置'.ssh/config'來提供他們自己的服務器用戶名,如果它不同於他們的本地用戶名)。其次,'git submodule init'將子模塊條目從'.gitmodules'複製到'.git/config',所以有一點(在'init'之後,但在第一次使用'git submodule update'之前),你可以在克隆之前重新配置子模塊的URL。如果這些子模塊已經被克隆,你的'(cd sub && git config remote.origin.url ...)'(也是)需要的。 – 2011-05-19 09:52:03
@克里斯約翰森:我已經添加了關於你的第一點的說明 - 謝謝。我很清楚後一點,但我一直在努力努力保持子模塊上的答案簡單,所以它們不會全部變成[漫不經心的博客文章](http://longair.net/blog/2010/06/02/git-submodules-explained /)關於你的子模塊可以處於的所有不同狀態...無論如何,我會更新這個答案來描述這種情況,以及:( – 2011-05-19 10:41:44
好吧,我希望改進現在, – 2011-05-19 11:00:40