git子模块的不同推/拉网址

时间:2013-04-18 10:25:09

标签: git git-submodules gitlab

我在一个大型项目中使用git superproject pattern,该项目由没有存储库帐户的Teamcity构建代理部署,但是存储库设置为允许匿名克隆。出于这个原因,我已经使用http:// url而不是他们的git url设置了子模块。这个问题是存储库拒绝http推送:

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://网址进行推送?

1 个答案:

答案 0 :(得分:6)

LibreOffice project also uses submodules并包含:

  

默认情况下,子模块存储库处于称为“分离的HEAD”的状态,这意味着提交签出 - 超级项目(核心)需要的 - 不与本地分支名称相关联

     

不要忘记为您正在处理的子模块添加正确的pushurl,否则您将无法提交。

$ editor .git/modules/submodule/config
  

[remote "origin"]部分中添加:

pushurl = ssh://logerrit/submodule

(类似于soulseekahcomment)(在您的情况下,使用git://地址)

您也可以通过(在子模块中)

来完成
git config remote.origin.pushurl git://...

如果你没有,如this project中所说,你会得到一个:

fatal: The remote end hung up unexpectedly