PyGitHub脚本无报错未更新仓库,修改后出现文件不匹配错误
问题解决方案
核心错误原因
你在repo.update_file()中传入的第一个参数是本地文件的全路径,但GitHub API要求的是仓库内的相对路径(和get_contents()里的路径一致),这直接导致了「文件不匹配」错误。另外,未指定文件编码可能引发隐性的内容差异,也是潜在问题。
修改后的脚本
from github import Github # 初始化GitHub客户端 g = Github('你的token') repo = g.get_user('你的用户名').get_repo('你的仓库名') # 获取仓库中目标文件的最新信息(确保SHA是最新的) file_path_in_repo = 'src/history.csv' contents_h = repo.get_contents(file_path_in_repo) # 本地文件路径 local_file_path = '{full path}/src/history.csv' # 读取本地文件,指定编码避免乱码/内容差异 with open(local_file_path, "r", encoding="utf-8") as file: new_h_content = file.read() # 更新仓库文件,注意第一个参数用仓库内的相对路径 repo.update_file( path=file_path_in_repo, message="自动更新history.csv", content=new_h_content, sha=contents_h.sha, branch='main' )
额外注意事项
- 确保你的GitHub Token拥有仓库的写入权限(repo权限),否则会静默失败。
- 如果脚本运行间隔较长,建议在更新前重新调用
get_contents()获取最新的SHA值,避免因仓库文件被其他方式修改导致的SHA不匹配错误。 - 若有第二个CSV文件,只需复制上述逻辑,替换对应的文件路径即可。
内容的提问来源于stack exchange,提问作者kqd
相关产品推荐
相关产品推荐

