如何使用curl向GitHub仓库推送文件,遇到404错误该如何修复
问题修复方案
1 GitHub REST API调用错误修复
404报错核心原因是调用的API端点地址错误,同时存在参数逻辑问题,具体修正点如下:
- 端点地址错误:GitHub创建/更新仓库文件的标准API路径需要增加
/contents/层级,正确格式为https://api.github.com/repos/{用户名}/{仓库名}/contents/{文件路径},原有调用地址漏掉了/contents/部分 - 逻辑错误:如果是新建不存在的文件,不需要传入
sha参数,只有修改已存在的文件时才需要提前获取该文件的最新sha值,调用GET接口拉取不存在的文件sha本身也会返回404 - 额外校验项:
- 个人访问令牌(PAT)需要提前勾选
repo权限,若仓库为私有仓库权限必须匹配 - 确认仓库默认分支名,2020年后GitHub新建仓库默认分支为
main而非master,分支名填错也会触发报错
- 个人访问令牌(PAT)需要提前勾选
修正后的代码示例
新建文件场景(文件不存在时使用)
curl -i https://api.github.com/repos/你的用户名/你的仓库名/contents/newFile.txt -X PUT \ -H "Authorization: token 你的个人访问令牌" \ -d "{\"message\": \"新增newFile.txt\", \"content\": \"$(openssl base64 -A -in newFile.txt)\", \"branch\": \"main\"}"
更新已存在文件场景
# 先获取已有文件的sha file_sha=$(curl -s https://api.github.com/repos/你的用户名/你的仓库名/contents/newFile.txt -H "Authorization: token 你的个人访问令牌" | jq -r '.sha') # 提交更新 curl -i https://api.github.com/repos/你的用户名/你的仓库名/contents/newFile.txt -X PUT \ -H "Authorization: token 你的个人访问令牌" \ -d "{\"message\": \"更新newFile.txt\", \"content\": \"$(openssl base64 -A -in newFile.txt)\", \"branch\": \"main\", \"sha\": \"$file_sha\"}"
2 邮件提交文件方案
- GitLab原生支持邮件推送文件功能:进入对应项目的「设置」→「仓库」→「按电子邮件推送」页面,开启功能后会生成专属提交邮箱,将需要上传的文件作为附件发送到该邮箱,即可自动提交到指定分支,邮件主题可自定义为提交信息。
- GitHub原生暂不支持直接通过邮件提交文件到仓库,可迁移到GitLab使用上述功能。
内容的提问来源于stack exchange,提问作者Morteza Asadi
相关产品推荐
相关产品推荐

