如何使用 CURL 上传 github 资产文件

tsa*_*eht 10 git curl github-api

我想在我的桌面上上传一个名为“hello.txt”的文件到我的 git 存储库,它有一个版本。我该怎么做呢?我阅读了 git 文档,但它说的是:

POST https://<upload_url>/repos/:owner/:repo/releases/:id/assets?name. 如何在 CURL 中做到这一点。我不明白这一点。

如何将此文件作为发布资产发布到我的 github 发布?谢谢

gal*_*drp 18

curl \
    -H "Authorization: token $GITHUB_TOKEN" \
    -H "Content-Type: $(file -b --mime-type $FILE)" \
    --data-binary @$FILE \
    "https://uploads.github.com/repos/hubot/singularity/releases/123/assets?name=$(basename $FILE)"
Run Code Online (Sandbox Code Playgroud)

  • 如果有人在为 github 的企业版尝试此操作后到达此处,则您将使用不同的上传 url 而不是“uploads.github.com”。创建新版本时,特定企业版本的上传 url 将作为参数 (upload_url) 返回 (8认同)

Pha*_*vij 8

扩展@galeksandrp的答案,以下是我遇到的一些问题

请注意,该--data-binary选项首先将文件内容复制到 RAM,因此如果您有大文件,例如接近 2048MB,即 github 版本的绝对限制,并且如果 RAM 不够,则会失败并显示curl: option -d: out of memory.

解决这个问题的方法是使用-T file path(不带@)。

另外,如果您想查看上传进度,您需要将输出通过管道传输到,cat例如curl <...the whole command> | cat

所以完整的命令看起来像这样

curl -X POST \
    -H "Content-Length: <file size in bytes>" \
    -H "Content-Type: $(file -b --mime-type $FILE)" \ #from @galeksandrp's answer
    -T "path/to/large/file.ext" \
    -H "Authorization: token $GITHUB_TOKEN" \
    -H "Accept: application/vnd.github.v3+json" \ 
    https://uploads.github.com/repos/<username>/<repo>/releases/<id>/assets?name=<name> | cat
Run Code Online (Sandbox Code Playgroud)

注意: 另一种方法是使用gh release upload <tag> <files>... [flags]curl 代替。(文档

gh是GitHub的官方命令行工具。