git子模块更新与其他用户

时间:2011-05-18 07:56:19

标签: git username git-submodules git-config

我已在我的计算机上以用户A身份登录,但我的回购邮件可通过我从中提取的服务器上的用户名B访问。 .gitmodules文件包含url = ssh://domain.com/abc/def.git

如何在执行git submodule update时将git配置为使用用户名B而不是A?

3 个答案:

答案 0 :(得分:30)

我假设子模块已经初始化,因此git config --list | grep ^submodule显示submodule.my-submodule.url=ssh://domain.com/abc/def.git之类的内容。

如果您还没有第一次运行git submodule update,那么您只需更改该配置选项,例如用:

git config submodule.my-submodule.url ssh://B@domain.com/abc/def.git

另一方面,如果子模块已经更新一次,那么子模块中的origin将被设置为指定的配置选项。在这种情况下,您需要执行以下操作:

cd my-submodule
git config remote.origin.url ssh://B@domain.com/abc/def.git

我担心这只是有点混乱,但是子模块非常灵活。我试图在a blog post中解释其中的一些细节。

答案 1 :(得分:12)

虽然上述解决方案有效,但我找到了一个更符合我需求的不同解决方案,也许是最初的请求者。我想要一种方法来为远程服务器上的所有git操作指定默认用户名,而不必修改每个项目的git配置。该解决方案与git完全没有任何关系,但是ssh。

只需将这些行添加到〜/ .ssh / config:

Host domain.com
User B

(将domain.com替换为您的git服务器的域。)现在,即使您以用户A的身份登录到本地计算机,SSH也会在连接到服务器时使用B作为用户名。

现在您可以运行git submodule update而无需在git config中添加用户名。

答案 2 :(得分:1)

简短的回答是“检查你是否可以使用子模块的相对路径”

细节是, 我们有多个应用程序正在使用的子模块。我们将子模块保存在同一个仓库中。

结构是这样的, 回购

|-app1
|-app2
|-submod

当我们克隆应用时,app / .git / config会获得当前用户的网址,例如'userA@repo.com' 在应用程序的.gitmodules中,我们将url称为“../submod” 通过这种方式,当我们执行'submodule init'时,git会从我们在.gitmodules中给出的相对url为子模块生成绝对url。