You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Action执行Python脚本并提交推送失败求助

问题分析与修复方案

核心问题

  1. 重复执行checkout操作:在execute py script步骤中再次调用actions/checkout@v3会重置工作区,直接覆盖Python脚本生成的文件,同时打乱后续Git操作的上下文。
  2. 浅克隆限制:默认actions/checkout@v3是浅克隆(仅拉取最新1次提交),缺失完整Git历史会导致推送操作失败。
  3. 提交逻辑缺失:未处理"无文件变更"的场景,空提交会直接触发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:05:21