调用GitHub CLI更新文件生成快速拉取请求返回404如何解决
问题原因
- 你调用的
/<my_org>/<my_repo>/tree-save/路径是GitHub网页端的内部私有UI接口,不属于官方公开的REST API范畴。GitHub CLI的gh api默认请求的是https://api.github.com域名下的公开API路由,直接传入私有UI接口路径必然返回404,且这类内部接口不对外提供支持、规则随时可能变更,也不兼容gh的OAuth token鉴权逻辑。 - 你使用的
repos/<my_org>/<my_repo>/contents/<path_to_file>是官方公开接口,但你使用-F参数传递表单格式数据是错误的:该接口的写入操作仅接受JSON格式的请求体,且-F参数会默认将请求方法改为POST,不符合该接口更新文件要求的PUT方法,因此也会报错。你之前不带-F的GET请求能正常返回,正是因为GET请求不需要提交请求体、方法匹配。
解决方案
GitHub CLI完全支持你需要的「编辑文件+创建新分支」需求,不需要克隆本地仓库,也不需要手动生成token,使用官方公开的内容API即可实现,步骤如下:
- 先获取目标文件当前的SHA值(更新文件必须传入该值用于校验版本):
FILE_SHA=$(gh api repos/<my_org>/<my_repo>/contents/<path_to_file> --jq '.sha')
- 调用内容API的PUT方法传入更新内容,同时指定要新建的分支名即可完成操作,注意文件内容需要先做Base64编码:
# 如果你要写入的内容是本地文件的内容: NEW_CONTENT=$(base64 -w0 /path/to/your/new/file) # 如果你要直接写入自定义文本内容: # NEW_CONTENT=$(echo "你要写入的新文件内容" | base64 -w0) gh api -X PUT repos/<my_org>/<my_repo>/contents/<path_to_file> \ -f message="你的提交说明" \ -f content="$NEW_CONTENT" \ -f sha="$FILE_SHA" \ -f branch="<你要创建的新分支名称>"
- (可选)如果需要同时创建PR,可以追加执行以下命令:
gh pr create --base master --head "<你创建的新分支名称>" --title "PR标题" --body "PR描述内容"
内容的提问来源于stack exchange,提问作者JRogerC
相关产品推荐
相关产品推荐

