GitHub Maven CI流水线报错:缺失指定提交哈希值
解决GitHub Actions Maven CI中「Missing commit <提交哈希>」错误
从你贴的完整错误日志里,我一眼就定位到了问题根源——是ChangeLogMojo这个Maven插件在通过JGit遍历提交历史时,找不到指定的旧提交。这可不是流水线配置本身的问题,而是GitHub Actions默认的代码拉取方式搞的鬼:
GitHub Actions的actions/checkout@v2默认只会做浅克隆,也就是只拉取仓库最新的1个提交,完全不会下载更早的历史记录。但你的ChangeLog插件需要读取之前的提交信息,自然就会报“找不到提交”的错误了。
解决方案:修改checkout步骤拉取完整提交历史
只需要给actions/checkout步骤加一行配置,让它拉取仓库的完整提交历史就行:
把原来的:
- uses: actions/checkout@v2
改成:
- uses: actions/checkout@v2 with: fetch-depth: 0
fetch-depth: 0是GitHub Actions的特殊参数值,代表拉取所有分支、标签的完整提交历史,这样你的Maven插件就能访问到需要的旧提交了。
修改后的完整流水线配置
这里给你贴好修改后的完整maven.yml,直接替换使用即可:
# This workflow will build a Java project with Maven # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven name: Java CI with Maven on: push: branches: [ main ] pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 # 关键配置:拉取完整提交历史 - name: Set up JDK 16 uses: actions/setup-java@v2 with: java-version: '16' distribution: 'adopt' - name: Build with Maven run: mvn -B package --file pom.xml
额外小提示
如果你的插件只需要最近N个提交的历史,也可以把fetch-depth设为具体数字(比如fetch-depth: 20),这样能稍微节省点拉取时间。但为了避免后续再遇到类似的历史缺失问题,直接用0拉取完整历史是最省心的选择。
内容的提问来源于stack exchange,提问作者C. Dautermann
相关产品推荐
相关产品推荐

