Github Action执行Python脚本并提交推送失败求助
问题分析与修复方案
核心问题
- 重复执行checkout操作:在
execute py script步骤中再次调用actions/checkout@v3会重置工作区,直接覆盖Python脚本生成的文件,同时打乱后续Git操作的上下文。 - 浅克隆限制:默认
actions/checkout@v3是浅克隆(仅拉取最新1次提交),缺失完整Git历史会导致推送操作失败。 - 提交逻辑缺失:未处理"无文件变更"的场景,空提交会直接触发Action执行失败。
修复后的完整Action配置
name: refresh map on: schedule: - cron: "30 11 * * *" # 每天UTC时间11:30执行 jobs: getdataandrefreshmap: runs-on: ubuntu-latest steps: - name: 拉取仓库代码 uses: actions/checkout@v3 with: fetch-depth: 0 # 拉取完整Git历史,避免推送失败 persist-credentials: false # 禁用默认凭证,使用GITHUB_TOKEN推送 - name: 配置Python环境 uses: actions/setup-python@v4 with: python-version: 3.8 - name: 安装依赖 run: | if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: 执行Python脚本并推送变更 run: | # 执行脚本生成HTML地图与CSV文件 python main.py # 配置Git机器人用户信息 git config --global user.name "github-actions[bot]" git config --global user.email "github-actions[bot]@users.noreply.github.com" # 检查是否有文件变更,避免空提交 git add . if git diff --cached --quiet; then echo "无文件变更,跳过提交" exit 0 fi # 提交并推送变更到main分支 git commit -m "定时更新:生成最新地图与CSV数据" git push https://${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git main
关键修复说明
- 移除重复checkout:仅在第一步执行一次仓库拉取,保留工作区中脚本生成的文件。
- 完整克隆仓库:设置
fetch-depth: 0获取完整Git历史,解决推送时的历史不匹配问题。 - 优化Git操作:
- 使用官方推荐的机器人身份配置Git用户信息,避免权限或身份验证问题。
- 增加变更检查逻辑,无更新时直接终止流程,避免空提交报错。
- 通过仓库内置的
GITHUB_TOKEN完成推送,确保Action具备仓库写权限(定时触发场景下默认授权)。
内容的提问来源于stack exchange,提问作者shora
相关产品推荐
相关产品推荐

