通过ssh或https自动访问git子模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过ssh或https自动访问git子模块相关的知识,希望对你有一定的参考价值。
题: 有没有办法通过与主存储库相同的方法(ssh或https)自动检出git子模块?
背景:
我们有一个非公共gitlab存储库(main
),它有一个子模块(utils
),它也作为非公共gitlab存储库托管在同一台服务器上。可以通过ssh或https访问这些存储库:
user@gitlabserver.com:my/path/repo.git
https://gitlabserver.com/my/path/repo.git
两种变体显然都需要不同形式的认证,并且取决于客户端计算机和用户,优选一种或另一种。
对于不是问题的顶级存储库(main
),任何人都可以选择他或她喜欢的方法,但对于子模块,这取决于.gitmodules
文件,因此(最初)对所有人都是相同的。
现在,而不是每个人都必须将.gitmodules文件调整为他们喜欢的任何内容,并确保他们不会意外地提交这些更改,如果有一种方法只需指定服务器和repo路径并且git选择其中一个,那就太好了。用于主repo的方法,或者可以在gitconfig中设置的方法。
我最终通过将子模块url指定为relative path解决了这个问题:
所以,假设您可以访问主git存储库
- 要么通过
https://gitlabserver.com/my/path/main.git
- 或通过
user@gitlabserver.com:my/path/main.git
而.gitmodules
文件看起来像这样:
[submodule "utils"]
path = libs/utils
url = https://gitlabserver.com/my/path/utils.git
这意味着即使您通过ssh检出主应用程序,仍然可以通过https访问子模块utils。
但是,您可以用这样的相对路径替换绝对路径:
[submodule "utils"]
path = libs/utils
url = ../utils.git
从现在开始使用
- 要么
git clone --recursive https://gitlabserver.com/my/path/main.git
- 或者
git clone --recursive user@gitlabserver.com:my/path/main.git
获得您想要的整个存储库结构。显然,这对于相对ssh和https路径不相同的情况不起作用,但至少对于gitlab托管的存储库来说就是这种情况。
如果您(无论出于何种原因)在两个不同的远程站点镜像您的存储库结构,这也很方便。
以上是关于通过ssh或https自动访问git子模块的主要内容,如果未能解决你的问题,请参考以下文章
我可以将 git 子模块与某种后备 URL 链接起来吗?如果 SSH 克隆失败,git 应该可以使用 https 进行克隆
在 ssh-agent 中同时加载两个 ssh-keys 时,克隆(更新)git 子模块失败