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

如何使用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,分支名填错也会触发报错

修正后的代码示例

新建文件场景(文件不存在时使用)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:48:05