2013-04-18 39 views
5

我在一個大型項目中使用git superproject pattern,該項目由Teamcity構建代理部署,該構建代理沒有存儲庫帳戶,但存儲庫已設置爲允許匿名克隆。由於這個原因,我已經建立了他們的http:// url而不是他們的git url的submodules。這樣做的問題是,庫拒絕HTTP推:git子模塊的不同推/拉網址

Total 0 (delta 0), reused 0 (delta 0) 
error: RPC failed; result=22, HTTP code = 401 
fatal: The remote end hung up unexpectedly 
fatal: The remote end hung up unexpectedly 

所以每次切換分支時我更新子模塊的時候,我要做一個git remote add-url --push添加git://網址。

有沒有什麼辦法可以在超級項目中設置子模塊,以便他們已經使用網址http://進行拉取,並使用git://進行推送?

+0

也許設置'pushURL'在'git的/子模塊/ /config'。 – soulseekah

回答

5

LibreOffice project also uses submodules,包括:

默認情況下你子模塊庫在一個名爲「分離的頭」,這意味着狀態提交簽出 - 這是一個超級項目(核心)需要 - 不與本地分支名稱相關聯。

不要忘記爲您正在使用的子模塊添加正確的pushurl,否則您將無法提交。

$ editor .git/modules/submodule/config 

,並在段[remote "origin"]地址:

pushurl = ssh://logerrit/submodule 

(類似於soulseekahcomment)(在你的情況下,使用git://地址)

你也可以通過(在子模塊內)完成

git config remote.origin.pushurl git://... 

如果不這樣做,因爲在this project illulstrated,你會得到一個:

fatal: The remote end hung up unexpectedly 
+0

所以一旦完成,是否有任何方法將該配置推送到存儲庫,以便任何新的克隆都能得到它? – theheadofabroom

+0

@BiggAl沒有這是一個*本地*配置,這將不會推。 – VonC

+0

作爲一個自己的說明,vime搜索和替換可以通過'g:url =:s:^ \(。\ + \)url = http \(。\ + \)/ \(qa /。\ + \ )$:\ 1u​​rl = http \ 2/\ 3 \ r \ 1pushurl = git \ 2 \:\ 3:'in .submodules或'g:url =:s:^ \(。\ + \)url = http \ (。\ + \)/ \(qa /。\ + \)$:\ 1u​​rl = http \ 2/\ 3 \ r \ 1pushurl = git \ 2 \:\ 3:'in .git/config – theheadofabroom