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

How to use same protocol for git submodules?

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

git submodule add git@mygitserver...

现在用户刚刚使用 https 克隆了 R 并在 运行

时收到错误
git submodule init
git submodule update

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

该用户可以设置配置:

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

这样,mygitserver(主仓库或子模块)将始终使用 https 网址,而不是 ssh 网址。

我没有详细测试(只有一些情况),但似乎如果你的 .gitmodules 文件使用相对 url 并且如果 repo 总是通过 "full 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 将不起作用。