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

GitHub Action中如何克隆含私有子模块的私有Git仓库?

报错根因

actions/checkout@v3 默认使用工作流内置的GITHUB_TOKEN做鉴权,这个token默认仅持有当前运行工作流的主仓库的访问权限,没有权限拉取同账号/组织下的其他私有仓库,所以子模块克隆阶段会返回Repository not found错误,本质是权限不足,不是仓库地址真的不存在。

可落地的解决方法

方法1:传入具备多私有仓库访问权限的PAT(适配个人账号/所有组织场景)

  • 生成GitHub Personal Access Token(PAT),权限勾选完整的repo域权限,确认PAT所属账号同时拥有主仓库、子模块私有仓库的拉取权限
  • 将生成的PAT保存到主仓库的Actions Secrets中,例如命名为REPO_ACCESS_TOKEN
  • 修改checkout步骤配置,传入自定义token:
- uses: actions/checkout@v3
  with:
    submodules: true
    token: ${{ secrets.REPO_ACCESS_TOKEN }}

配置后checkout动作会自动将传入的token用于所有子模块的拉取鉴权,不需要额外手动配置git认证规则。

方法2:同组织仓库直接放开内置GITHUB_TOKEN权限(无需额外生成PAT)

如果主仓库和子模块归属于同一个GitHub组织,可以直接调整组织配置让内置token拥有跨仓库访问权限:

  • 进入组织设置的「Actions - General」配置页
  • 找到Workflow permissions板块,勾选允许GitHub Actions访问组织内所有仓库的选项,保存配置
  • 在工作流文件顶层添加全局权限声明:
permissions:
  contents: read

配置完成后原有submodules: true的配置就可以正常拉取私有子模块,不需要额外传token。

补充说明
  • 如果存在多层嵌套子模块,将submodules: true替换为submodules: recursive即可递归拉取所有层级的子模块
  • 如果需要拉取完整提交历史而非浅克隆,额外配置fetch-depth: 0即可
  • 禁止将PAT明文写在工作流文件中,必须通过Secrets注入使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:24:21