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

Git子模块加载失败(协议问题)致Drupal项目构建受阻,求解决方案

解决Drupal子模块克隆超时问题及快速修改GA ID方法

我们收购了一个包含数十个子模块、构建流程复杂的Drupal网站,使用git clone --recursive <GitHub复制的.git URL>克隆仓库并安装子模块时,每次执行到microdata子模块都会失败,报错信息如下:

Submodule 'tests/MicrodataPHP' (git://github.com/linclark/MicrodataPHP.git) registered for path 'src/sites/all/modules/contrib/microdata/tests/MicrodataPHP'
Cloning into '<local path>/src/sites/all/modules/contrib/microdata/tests/MicrodataPHP'...
fatal: unable to connect to github.com:
github.com[0: 140.82.113.3]: errno=Operation timed out

fatal: clone of 'git://github.com/linclark/MicrodataPHP.git' into submodule path '<local path>/src/sites/all/modules/contrib/microdata/tests/MicrodataPHP' failed

已尝试以下方案但均无效:

  • 单独克隆MicrodataPHP仓库(HTTPS和GIT协议均能正常克隆)
  • 移除项目中对microdata的引用
  • 将microdata的URL从HTTP改为HTTPS
  • 直接下载Drupal microdata仓库并添加到项目中
  • 直接下载MicrodataPHP仓库并添加到项目中

目前困境:仅需修改仓库中一行内容更新Google Analytics ID,但本地无法构建验证;推送PR后Travis构建因相同错误失败,无法部署;且网站采用Docker Swarm,无法直接在生产环境修改。


解决方案

一、解决子模块克隆超时问题

  1. 全局替换git协议为HTTPS
    执行以下命令,让所有git://协议的请求自动转为HTTPS,避开可能的git协议端口阻塞:
git config --global url."https://github.com/".insteadOf "git://github.com/"

之后重新执行git clone --recursive <GitHub复制的.git URL>即可。

  1. 手动初始化子模块并跳过问题模块
  • 先克隆主仓库(不带--recursive):
git clone <GitHub复制的.git URL>
  • 进入仓库后初始化子模块,但跳过有问题的MicrodataPHP:
git submodule init
git submodule update --exclude src/sites/all/modules/contrib/microdata/tests/MicrodataPHP
  • 把本地单独克隆好的MicrodataPHP目录复制到上述跳过的路径,然后执行:
git add .
git commit -m "Fix MicrodataPHP submodule clone issue"
  1. 修改.gitmodules文件同步URL
  • 找到仓库根目录的.gitmodules文件,将对应MicrodataPHP的条目:
[submodule "src/sites/all/modules/contrib/microdata/tests/MicrodataPHP"]
	path = src/sites/all/modules/contrib/microdata/tests/MicrodataPHP
	url = git://github.com/linclark/MicrodataPHP.git

修改为:

[submodule "src/sites/all/modules/contrib/microdata/tests/MicrodataPHP"]
	path = src/sites/all/modules/contrib/microdata/tests/MicrodataPHP
	url = https://github.com/linclark/MicrodataPHP.git
  • 同步子模块配置并重新初始化:
git submodule sync
git submodule update --init --recursive

二、无需全量构建修改GA ID的方法

如果仅需修改一行GA ID,可绕过全量构建流程:

  1. 直接修改目标文件
    克隆主仓库(不带--recursive),找到存放GA ID的文件(通常是sites/default/settings.php或自定义模块的配置文件),直接修改对应行的ID。

  2. 提交修改并调整Travis配置

  • 提交修改后推送PR,同时修改仓库根目录的.travis.yml,在构建前添加协议替换命令:
before_install:
  - git config --global url."https://github.com/".insteadOf "git://github.com/"

让Travis构建时自动转换协议,解决子模块克隆问题,完成部署。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:22:56