首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用GitHub v3接口创建提交和推送到存储库?

如何使用GitHub v3接口创建提交和推送到存储库?
EN

Stack Overflow用户
提问于 2012-08-04 03:18:19
回答 7查看 31.7K关注 0票数 33

我想创建一个存储库,并通过任何Python包将一些文件提交给它。我该怎么办?

我不知道如何添加要提交的文件。

EN

回答 7

Stack Overflow用户

发布于 2013-05-07 14:25:04

您可以查看新的更新GitHub CRUD API (May 2013)是否可以提供帮助

repository contents API已经允许读取文件一段时间了。现在,您可以轻松地将更改提交到单个文件,就像在web UI中一样。

从今天开始,您可以使用以下方法:

  • File Create
  • File Update
  • File Delete
票数 17
EN

Stack Overflow用户

发布于 2020-08-18 11:10:58

使用请求库的解决方案:

注意:我使用requests库调用GitHub REST API v3。

1.获取特定分支的最后提交SHA

代码语言:javascript
运行
复制
# GET /repos/:owner/:repo/branches/:branch_name
last_commit_sha = response.json()['commit']['sha']

2.使用文件内容(编码base64或utf-8)创建blobs

代码语言:javascript
运行
复制
# POST /repos/:owner/:repo/git/blobs
# {
#  "content": "aGVsbG8gd29ybGQK",
#  "encoding": "base64"
#}
base64_blob_sha = response.json()['sha']

# POST /repos/:owner/:repo/git/blobs
# {
#  "content": "hello world",
#  "encoding": "utf-8"
#}
utf8_blob_sha = response.json()['sha']

3.创建定义文件夹结构的树

代码语言:javascript
运行
复制
# POST repos/:owner/:repo/git/trees/
# {
#   "base_tree": last_commit_sha,
#   "tree": [
#     {
#       "path": "myfolder/base64file.txt",
#       "mode": "100644",
#       "type": "blob",
#       "sha": base64_blob_sha
#     },
#     {
#       "path": "file-utf8.txt",
#       "mode": "100644",
#       "type": "blob",
#       "sha": utf8_blob_sha
#     }
#   ]
# }
tree_sha = response.json()['sha']

4.创建提交

代码语言:javascript
运行
复制
# POST /repos/:owner/:repo/git/commits
# {
#   "message": "Add new files at once programatically",
#   "author": {
#     "name": "Jan-Michael Vincent",
#     "email": "JanQuadrantVincent16@rickandmorty.com"
#   },
#   "parents": [
#     last_commit_sha
#   ],
#   "tree": tree_sha
# }
new_commit_sha = response.json()['sha']

5.更新分支的引用以指向新的提交(在主分支示例上)

代码语言:javascript
运行
复制
# POST /repos/:owner/:repo/git/refs/heads/master
# {
#     "ref": "refs/heads/master",
#     "sha": new_commit_sha
# }

最后,有关更高级的设置,请阅读docs

票数 17
EN

Stack Overflow用户

发布于 2017-10-16 05:24:59

下面是一个完整的代码片段:

代码语言:javascript
运行
复制
def push_to_github(filename, repo, branch, token):
    url="https://api.github.com/repos/"+repo+"/contents/"+filename

    base64content=base64.b64encode(open(filename,"rb").read())

    data = requests.get(url+'?ref='+branch, headers = {"Authorization": "token "+token}).json()
    sha = data['sha']

    if base64content.decode('utf-8')+"\n" != data['content']:
        message = json.dumps({"message":"update",
                            "branch": branch,
                            "content": base64content.decode("utf-8") ,
                            "sha": sha
                            })

        resp=requests.put(url, data = message, headers = {"Content-Type": "application/json", "Authorization": "token "+token})

        print(resp)
    else:
        print("nothing to update")

token = "lskdlfszezeirzoherkzjehrkzjrzerzer"
filename="foo.txt"
repo = "you/test"
branch="master"

push_to_github(filename, repo, branch, token)
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11801983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档