本地正常但GitHub Actions中根目录与子目录Git Commit ID一致问题排查
问题:GitHub Actions中git log查询根目录与子目录返回相同Commit ID
我需要通过对比根目录和子目录的最新Commit ID来识别文件夹变更,本地执行以下命令能正常得到不同结果:
- 获取根目录Commit ID:
git log --pretty=tformat:"%H" -n 1 -- . - 获取子目录Commit ID:
git log --pretty=tformat:"%H" -n 1 -- functions/function1
但在GitHub Actions里通过run.sh执行时,两个命令返回的Commit ID完全一致。我的checkout步骤配置如下:
- name: 'Checkout GitHub Action' uses: actions/checkout@v3 with: ref: ${{ github.event.workflow_run.head_branch }}
原因分析
GitHub Actions的actions/checkout@v3默认采用浅克隆(depth=1),只会拉取当前分支的最新一次提交,不会获取完整的仓库提交历史。这种情况下,仓库本地只有这一条提交记录,不管查询哪个目录的最新变更,都只能返回这唯一的Commit ID,因此出现两者相同的情况。而本地环境一般是完整克隆仓库,拥有全量提交历史,所以能正确返回对应目录的最新变更Commit。
解决办法
修改checkout步骤,添加fetch-depth: 0参数来拉取完整的仓库提交历史:
- name: 'Checkout GitHub Action' uses: actions/checkout@v3 with: ref: ${{ github.event.workflow_run.head_branch }} fetch-depth: 0 # 拉取全量提交历史
如果不需要完整历史,也可以指定一个足够大的depth值(比如fetch-depth: 100),只要能覆盖到目标子目录最近的变更提交即可,但fetch-depth: 0是最稳妥的方案,确保能获取所有历史记录。
内容的提问来源于stack exchange,提问作者user6249539
相关产品推荐
相关产品推荐

