如何为git子模块使用相同的协议?

时间:2016-04-12 05:57:41

标签: git git-submodules

在git存储库中我有一个子模块,我使用以下命令初始化:

git submodule add git@mygitserver...

现在,用户只是使用https克隆了R,并在运行

时出错
git submodule init
git submodule update

因为他没有ssh(上传服务器上的公钥)访问权限。 所以我的问题是,是否可以创建一个子模块,该子模块将自动使用与用于克隆git submodule update命令上的父存储库的协议相同的协议?

2 个答案:

答案 0 :(得分:4)

该用户可以设置配置:

git config --global url.https://mygitserver/.insteadOf ssh://git@mygitserver/
# or possibly (to be tested)
git config --global url.https://mygitserver/.insteadOf git@mygitserver/

这样,https网址将始终用于mygitserver(主要回购或子模块),而不是ssh版。

答案 1 :(得分:1)

我还没有详细测试(仅在某些情况下),但是看来,如果您的.gitmodules文件使用相对URL,并且如果回购协议始终是通过“完整URL”克隆的,那么事情应该可以进行:

.gitmodules

 [submodule "same_users"]
    path = same_users
    url = ../something.git
 [submodule "other_user"]
    path = same_users
    url = ../../different-user/something.git

 # Maybe even this?
 [submodule "other_server"]
    path = same_users
    url = //git@gitlab.com/joe_r_user/hacks.git

克隆:

git clone ssh://git@github.com/user/repo.git ./ssh
cd ssh
git submodule update --init --recursive

但是,如果用户选择clone git@github.com:user/repo.git(请注意:),则update将不起作用。