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

如何在GitHub Actions中拉取GitLab上的子模块?

在GitHub Actions中拉取GitLab子模块的实现方案

由于actions/checkout默认仅支持用GitHub仓库的token拉取子模块,无法直接处理GitLab的跨平台子模块,你可以通过以下步骤手动实现:

1. 准备GitLab访问凭证

  • 登录目标GitLab子模块仓库,生成一个个人访问令牌(PAT),权限勾选read_repository即可满足拉取需求。
  • 进入GitHub主仓库的「Settings」→「Secrets and variables」→「Actions」,添加该令牌为仓库密钥,命名为GITLAB_PAT。

2. 配置Git认证规则(推荐)

在工作流中添加Git配置,让Git拉取GitLab仓库时自动带上认证令牌:

- name: Configure Git for GitLab
  run: |
    git config --global url."https://oauth2:${{ secrets.GITLAB_PAT }}@gitlab.com/".insteadOf "git@gitlab.com:"

这个配置会把所有git@gitlab.com:开头的仓库URL,自动替换为带令牌的HTTPS地址,无需修改本地.gitmodules文件。

3. 拉取并更新子模块

先用actions/checkout拉取主仓库,再手动初始化并更新子模块:

- name: Checkout main repository
  uses: actions/checkout@v4
  # 注意不要开启submodules参数,避免默认token无效的问题

- name: Initialize and update submodules
  run: |
    git submodule init
    git submodule update --recursive

可选:单独指定子模块URL(无需全局配置)

如果不想修改全局Git配置,也可以直接为目标子模块设置带认证的URL:

- name: Update specific GitLab submodule
  run: |
    git submodule set-url ./path/to/submodule https://oauth2:${{ secrets.GITLAB_PAT }}@gitlab.com/your-username/your-submodule.git
    git submodule update --init --recursive ./path/to/submodule

注意事项

  • 确保GitLab PAT的权限仅保留必要的read_repository,避免权限过大带来风险。
  • 如果子模块包含嵌套的子模块,必须加上--recursive参数才能完整拉取。
  • 工作流中引用密钥时,必须用${{ secrets.GITLAB_PAT }}的格式,不要硬编码令牌内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:22:10