使用 curl 将文件推送到 GitHub 存储库

Using curl for pushing a file to GitHub repository

我想在没有 git 工具的情况下在 GitHub 存储库上创建(推送)新文件,(因为 git 工具在我的 PHP 上不可用主持人)。所以我进行了一些研究,发现 GitHub REST API.

我尝试使用 curl 和个人访问令牌来上传或修改我的存储库中的文件。 here is 我找到的 shell 代码,并对 curl 进行了更改,如下所示:

curl -i https://api.github.com/repos/username/repo/newFile.txt -X PUT 
\ -H 'Authorization: token xxxxxxxxxxxxxxxxxxxx' -d "{\"path\": \"newFile.txt\", 
\ \"message\": \"update\", \"content\": \"$(openssl base64 -A -in newFile.txt)\", \"branch\": 
\"master\",
\ \"sha\": $(curl -X GET https://api.github.com/repos/username/repo/newFile.txt  | jq .sha)}" 

但是我得到这个错误:

HTTP/1.1 404 Not Found

Server: GitHub.com

我该如何解决这个问题?

P.S。即使 GitHub 或 (GitLab) 上有 push file by email 服务,这也有助于通过电子邮件在我的存储库上创建文件。

应该是“Create or update file contents”端点API:

PUT /repos/{owner}/{repo}/contents/{path}

(我在你的 https://api.github.com/repos/username/repo/newFile.txt URL 中没有看到 contents

确保使用最近的 PAT(个人访问令牌),如 seen here
并且 an example:

#! /bin/bash
 
cartella= " /var/myfolder "
 
# update the file
curl -i -X ​​PUT -H ' Authorization: token 4d013330xxxxxxxxxxxxxxx ' -d " { \" path \" : \" mattei.csv \" , \
\" message \" : \" update \" , \" content \" : \" $( openssl base64 -A -in $cartella /mattei.csv ) \" , \" branch \" : \" master \" , \
\" sha \" : $( curl -X GET https://api.github.com/repos/username/repo/contents/mattei.csv | jq .sha ) } " \
https://api.github.com/repos/username/repo/contents/mattei.csv

我把我的工作 curl 放在这里,如果有人需要的话。

为了方便推送,最好把你的文件做成base64格式(base64 {filename}online tools)然后:

curl -X PUT -H "Authorization: token xxxxxxxxxxxxxxxxxxxx" https://api.github.com/repos/{owner}/{repo}/contents/{path}/{fileName} -d "{\"message\":\"your commit message\",\"content\":\"your file in BASE64\"}"