GitHub Action拉取私有Git子模块遭遇认证失败问题求助
问题
在触发push事件的GitHub Action中尝试拉取私有Git子模块,已创建拥有仓库只读权限的PAT,并将其作为密钥添加到主仓库(非子模块)。GitHub Action配置文件如下:
name: Java CI on: [ push ] env: SUBMODULE_ACCESS: ${{ secrets.SUBMODULE_ACCESS }} jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Update submodules run: | git config --global url."https://${SUBMODULE_ACCESS}:x-oauth-basic@github.com/".insteadOf "https://github.com/" git submodule update --init --recursive - name: Set up JDK 19 uses: actions/setup-java@v2 with: java-version: '19' distribution: 'adopt' - name: Cache local .m2 uses: actions/cache@v2 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**.pom.xml') }} restore-keys: | ${{ runner.os }}-maven- - name: Run lints and test with Maven run: mvn clean install -Dall
运行时出现如下错误:
remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
已按文档要求配置PAT,但问题仍存在,该如何解决?
解决方案
直接通过
actions/checkout处理子模块拉取
无需手动修改Git全局配置,在actions/checkout步骤中添加参数,让它自动完成主仓库和子模块的身份验证:- uses: actions/checkout@v3 with: submodules: 'true' token: ${{ secrets.SUBMODULE_ACCESS }}配置后可移除原有的
Update submodules步骤,checkout动作会自动拉取所有子模块。修正手动更新子模块的Git配置
若要保留手动更新逻辑,去掉配置中多余的:x-oauth-basic,GitHub HTTPS认证中仅需传入PAT作为用户名即可:git config --global url."https://${SUBMODULE_ACCESS}@github.com/".insteadOf "https://github.com/"验证PAT权限有效性
确认PAT已勾选repo权限范围(包含私有仓库的读写/只读权限),且未过期、未被撤销。可在GitHub个人设置的「开发者设置」中查看PAT的权限配置。
内容的提问来源于stack exchange,提问作者zodac
相关产品推荐
相关产品推荐

