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

使用Requests API更新GitHub文件遇到的三类技术问题

使用GitHub REST API更新文件的问题解答

问题1:请求返回201,但代码推送到了main分支而非branch-1

你的代码存在两个关键错误:

  • payload的JSON中branch 键后面多了空格,导致GitHub无法识别该参数,默认推送到仓库的默认分支(main)
  • 路径里的?ref=branch-1是错误用法,GitHub API不需要在路径里加这个查询参数,分支信息应通过payload里的branch字段指定

修正方法:
把payload里的"branch ": "branch-1"改为"branch": "branch-1",同时将path改为纯文件名"test6.txt",移除多余的查询参数。

问题2:指定现有文件返回422状态码,如何更新现有文件?

更新GitHub上的现有文件必须提供该文件的sha值——这是文件当前版本的唯一标识,GitHub用它做冲突检测,确保你更新的是最新版本的文件。

操作步骤:

  1. 发送GET请求获取目标文件信息,请求路径为https://api.github.com/repos/{owner}/{repo}/contents/{path}?ref=branch-1,从返回的JSON数据中提取sha字段
  2. 将sha字段添加到payload中,格式示例:
{
  "branch": "branch-1",
  "message": "my commit message",
  "committer": {"name":"Monalisa Octocat","email":"octocat@github.com"},
  "content": "bXkgbmV3IGZpbGUgY29udGVudHM=",
  "sha": "获取到的文件sha值"
}

问题3:该操作触发的事件是什么?如何通过GitHub工作流捕获?

通过API推送代码会触发push事件。

在GitHub工作流(.github/workflows/目录下的YAML文件)中,可以这样捕获该事件:

name: 监听API推送
on:
  push:
    branches:
      - branch-1 # 可指定只监听特定分支的push事件
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 执行任务
        run: echo "检测到API推送的代码"

修正后的完整示例代码

import requests
import json

owner = "你的用户名"
repo = "你的仓库名"
token = "你的GitHub令牌"
path = "test6.txt"
branch = "branch-1"

# 获取现有文件的sha(更新文件时必须)
get_url = f"https://api.github.com/repos/{owner}/{repo}/contents/{path}?ref={branch}"
get_response = requests.get(
    get_url,
    headers={'authorization': f'Bearer {token}'}
)
file_sha = get_response.json()['sha']

# 构造正确的payload
payload = {
    "branch": branch,
    "message": "my commit message",
    "committer": {"name": "Monalisa Octocat", "email": "octocat@github.com"},
    "content": "bXkgbmV3IGZpbGUgY29udGVudHM=",
    "sha": file_sha
}

put_url = f"https://api.github.com/repos/{owner}/{repo}/contents/{path}"
r = requests.put(
    put_url,
    headers={
        'accept': 'application/vnd.github.v3+json',
        'authorization': f'Bearer {token}'
    },
    data=json.dumps(payload)
)

print(r.status_code)
print(r.json())

内容的提问来源于stack exchange,提问作者Karki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:05:25