You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制Git使用HTTPS协议克隆子模块及嵌套子模块?

解决Git子模块SSH转HTTPS克隆的方案

完全有办法搞定这个问题!核心思路是利用Git内置的URL替换功能,不用修改任何子模块配置文件,也不用调整Jenkins的全局设置。具体操作如下:

关键配置:url.<base>.insteadOf

Git的url.<base>.insteadOf配置项能让Git在遇到匹配的SSH地址时,自动替换成对应的HTTPS地址。这完美适配你的场景——不用改动子模块的原始配置,就能强制所有克隆操作走HTTPS。

1. 添加URL替换规则

根据你的Git托管平台(比如GitHub、GitLab等),在Jenkins的构建脚本开头添加对应的Git配置命令:

针对GitHub的替换:

# 全局生效(对构建机器上所有Git操作有效)
git config --global url."https://github.com/".insteadOf "git@github.com:"

# 或者仅当前项目生效(避免影响其他项目)
git config --local url."https://github.com/".insteadOf "git@github.com:"

针对GitLab的替换:

git config --global url."https://gitlab.com/".insteadOf "git@gitlab.com:"

通用SSH格式替换(比如ssh://git@xxx.com/xxx.git):

git config --global url."https://xxx.com/".insteadOf "ssh://git@xxx.com/"

如果你的项目涉及多个托管平台,只需添加多条对应的git config命令即可。

2. 克隆/更新项目及子模块

配置完成后,正常执行克隆或子模块更新命令,Git会自动替换所有子模块(包括嵌套子模块)的SSH地址为HTTPS:

首次克隆主项目并拉取所有子模块:

git clone --recurse-submodules <你的主项目HTTPS地址>
cd <主项目目录>

已克隆项目更新子模块:

git submodule update --init --recursive

为什么这个方案可行?

  • 完全不需要修改子模块的.gitmodules文件,符合你不能改动子模块配置的要求;
  • 不需要调整Jenkins的全局配置,只需在构建脚本中添加几行命令即可;
  • 嵌套子模块也会自动应用这个替换规则,因为Git的子模块操作会继承当前的配置。

内容的提问来源于stack exchange,提问作者Hitmands

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:35:33