我已在我的计算机上以用户A身份登录,但我的回购邮件可通过我从中提取的服务器上的用户名B访问。 .gitmodules
文件包含url = ssh://domain.com/abc/def.git
。
如何在执行git submodule update
时将git配置为使用用户名B而不是A?
答案 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。