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

使用Python向GitHub仓库推送w.txt后文件为空,求排查原因

问题原因及解决办法

核心问题:更新已有文件时缺少sha参数

GitHub的Contents API在更新已有文件时,必须提供该文件当前的SHA-1哈希值。如果不传入sha参数,API无法确认你要更新的是哪个版本的文件,会导致操作异常,出现看似成功但文件内容为空的情况。

解决步骤

  1. 先获取目标文件的当前SHA值
    在执行PUT请求前,先发送GET请求到同一个API地址,获取文件的sha字段:

    import requests
    
    # 获取文件当前的sha值
    get_api = "https://api.github.com/repos/Ixonblitz-MatOS/Worm/contents/w.txt"
    get_headers = {"Authorization": f"Bearer {token}"}
    get_r = requests.get(get_api, headers=get_headers)
    file_sha = get_r.json()["sha"] if get_r.status_code == 200 else None
    
  2. 在PUT请求的data中添加sha参数
    修改你的data字典,加入sha字段:

    data = {
        "message": msg,
        "content": text.decode("utf-8")
    }
    if file_sha:
        data["sha"] = file_sha
    
  3. 额外确认:文件读取与编码流程
    虽然你提到print(aa)能看到内容,但建议显式指定编码避免潜在问题:

    # 显式指定utf-8编码读取文件
    aa = open(fileName, 'r', encoding='utf-8').read()
    print(aa)
    # 直接完成base64编码并转字符串
    text = base64.b64encode(aa.encode("utf-8")).decode("utf-8")
    data["content"] = text
    

完整修正后的代码示例

import requests
import base64

fileName = "w.txt"
token = "你的有效token"
msg = "更新w.txt文件"

# 获取文件当前sha值(文件不存在则为None)
get_api = "https://api.github.com/repos/Ixonblitz-MatOS/Worm/contents/w.txt"
get_headers = {"Authorization": f"Bearer {token}"}
get_r = requests.get(get_api, headers=get_headers)
file_sha = get_r.json()["sha"] if get_r.status_code == 200 else None

# 读取文件并编码
aa = open(fileName, 'r', encoding='utf-8').read()
print(aa)
text = base64.b64encode(aa.encode("utf-8")).decode("utf-8")

# 构造请求并发送
api = "https://api.github.com/repos/Ixonblitz-MatOS/Worm/contents/w.txt"
headers = {
    "Authorization": f"Bearer {token}",
    "Content-type": "application/vnd.github+json"
}
data = {
    "message": msg,
    "content": text
}
if file_sha:
    data["sha"] = file_sha

r = requests.put(api, headers=headers, json=data)
print(r.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:25:34