在git存储库中我有一个子模块,我使用以下命令初始化:
git submodule add git@mygitserver...
现在,用户只是使用https
克隆了R,并在运行
git submodule init
git submodule update
因为他没有ssh(上传服务器上的公钥)访问权限。
所以我的问题是,是否可以创建一个子模块,该子模块将自动使用与用于克隆git submodule update
命令上的父存储库的协议相同的协议?
答案 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
将不起作用。