GitHub Action中公开仓库子模块文件不可见问题求助
问题解决方法
核心问题分析
- 子模块拉取配置位置错误:你将
submodules: true参数加到了setup-java步骤中,但该参数属于actions/checkout专属配置,setup-java不识别此参数,导致子模块完全没被拉取。 - SSH地址权限不兼容:子模块使用的
git@github.com:rxue/dictionary-jpa.git是SSH协议地址,GitHub Actions默认使用的GITHUB_TOKEN仅支持HTTPS协议拉取,无法通过SSH获取子模块内容,这也是目录为空的关键原因。
修复方案
方案一:改用HTTPS地址拉取子模块(推荐)
修改.gitmodules文件中的子模块URL为HTTPS格式:
[submodule "dictionary-jpa"] path = dictionary-jpa url = https://github.com/rxue/dictionary-jpa.git
执行本地同步并提交修改:
git submodule sync git commit -m "Update submodule URL to HTTPS" git push
方案二:配置Checkout步骤适配SSH拉取
若不想修改URL,需为actions/checkout配置SSH密钥(需额外生成并存储密钥到仓库 Secrets),或调整Checkout参数:
修正后的GitHub Action脚本
name: Build on: push: branches: [ main ] jobs: build: runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout code with submodules uses: actions/checkout@v3 with: submodules: true # 子模块拉取参数必须放在checkout步骤 persist-credentials: true # 保留凭证用于HTTPS协议拉取子模块 - name: Set up JDK 17 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' # settings-path: ${{ github.workspace }} # 按需启用该配置 - name: List submodule content run: ls -al dictionary-jpa - name: Build submodule run: mvn -B compile --file dictionary-jpa/pom.xml
验证要点
- 确认
submodules: true(若有嵌套子模块则用submodules: recursive)配置在actions/checkout步骤内 - 子模块URL协议需与GitHub Actions使用的凭证匹配:HTTPS用默认
GITHUB_TOKEN,SSH需配置对应私钥
内容的提问来源于stack exchange,提问作者Rui
相关产品推荐
相关产品推荐

