如何将私有Git子模块部署至GitHub Pages?
解决GitHub Pages部署私有子模块的权限问题
默认的GITHUB_TOKEN只拥有当前仓库的访问权限,没法拉取其他私有仓库的子模块——哪怕日志显示"设置子模块克隆的身份验证",那也只是用这个仓库级token尝试,它没有访问子模块仓库的权限。按下面步骤操作就能让两个仓库都保持私有:
创建带repo权限的个人访问令牌(PAT)
- 打开GitHub的「Settings」→「Developer settings」→「Personal access tokens」→「Tokens (classic)」
- 点击「Generate new token」,勾选
repo权限(这能让令牌访问你的所有私有仓库),设置过期时间后生成令牌,复制下来存好,刷新页面后就看不到了。
把PAT添加到主仓库的Actions Secrets里
- 进入主仓库的「Settings」→「Secrets and variables」→「Actions」→「New repository secret」
- 命名为
PRIVATE_SUBMODULE_TOKEN,把刚才复制的PAT粘贴到值的输入框,保存。
修改部署用的GitHub Actions Workflow文件
- 找到主仓库里的
.github/workflows/pages.yml(或者你用的部署工作流文件),找到checkout步骤,修改成下面的内容:- name: Checkout code uses: actions/checkout@v4 with: submodules: recursive # 没有嵌套子模块的话写true也行 token: ${{ secrets.PRIVATE_SUBMODULE_TOKEN }}
这样checkout的时候会用你创建的PAT来拉取子模块,因为这个令牌有私有仓库的访问权限,就能正常克隆子模块了。
- 找到主仓库里的
重新触发部署
- 手动运行一次Workflow,或者提交一次代码触发自动构建,现在应该能正常拉取私有子模块并部署了。
注意:如果子模块是组织仓库,你用来生成PAT的GitHub账号必须拥有该子模块仓库的访问权限(比如是仓库成员或者有读取权限)。
内容的提问来源于stack exchange,提问作者RuralAnemone
相关产品推荐
相关产品推荐

