【问题标题】:Github API create commitGithub API 创建提交
【发布时间】:2021-09-23 04:25:12
【问题描述】:

我需要有关 Github API 的帮助,

我需要通过 api 提交新版本的文件,我试图通过发送 post 请求来实现这一点

https://api.github.com/repos/:username/:repo:/git/commits/

有数据

{
    "login": "username",
    "token": "auth_token",
    "parent_commit": "sha",
    "message": "commit message.",
    "content": {
        "path": "full/path",
        "mode": "edit",
        "data": "new content"
    }
}

但结果失败 - 未找到。

有没有人知道在哪里发送这个请求以及这个格式是否正确?

(格式的灵感来自 - http://swanson.github.com/blog/2011/07/23/digging-around-the-github-api-take-2.html

谢谢!

【问题讨论】:

    标签: json api http github commit


    【解决方案1】:

    我也对这个感到困惑!

    提交新内容实际上是一个多步骤的过程,需要使用其低级和强大的 API。

    这里是a gist 我分享一个解决方案。请注意,有些东西是硬编码的,例如分支名称“master”。

    请随时 fork 和改进要点,或者如果您在运行此程序时遇到问题,请告诉我。

    【讨论】:

      【解决方案2】:

      请注意,自 2013 年 5 月以来,您拥有一个 CRUD API available

      这包括file update API

      {
        "message": "my commit message",
        "committer": {
          "name": "Scott Chacon",
          "email": "schacon@gmail.com"
        },
        "content": "bXkgdXBkYXRlZCBmaWxlIGNvbnRlbnRz",
        "sha": "329688480d39049927147c162b9d2deaf885005f"
      }
      

      (内容为更新后的文件内容,Base64 编码。)

      【讨论】:

        【解决方案3】:

        提交新内容实际上是一个多步骤的过程,使用它们的低级和强大的 API

        实际上,从 2021 年 9 月(9 年后)开始,它不是,而是使用 GraphQL GitHub API v4(而不是 GitHub API v3

        见:

        A simpler API for authoring commits:

        新的 GraphQL 变异 createCommitOnBranch 使添加、更新和删除存储库分支中的文件变得更加容易。

        与现有的 Git database REST APIs 相比,这个新 API 提供了一种更简单的方式来提交更改。
        使用新的 createCommitOnBranch 突变,您无需在创建提交之前手动创建 blob 和树。这允许您在单个 API 调用中添加、更新或删除多个文件。

        使用新 API 创作的提交会自动经过 GPG 签名,并且在 GitHub UI 中为 marked as verified。 GitHub 应用程序可以使用突变直接创作提交或on behalf of users

        $ curl https://api.github.com/graphql \ 
               -s -H "Authorization: bearer $TOKEN"
               --data @- <<GRAPHQL | jq \
                 '.data.createCommitOnBranch.commit.url[0:56]'
        {
          "query": "mutation (\$input: CreateCommitOnBranchInput!) {
            createCommitOnBranch(input: \$input) { commit { url } } }",
        
          "variables": {
            "input": {
              "branch": {
                "repositoryNameWithOwner": "demo-githubs/test",
                "branchName": "main"
              },
              "message": {"headline": "Hello from GraphQL!" },
              "fileChanges": {
                "additions": [{
                    "path": "GraphQL.md",
                    "contents": "`echo 'Hello, GraphQL! | base64`"
                }],
                "deletions": [{ "path": "REST.txt" }]
              },
              "expectedHeadOid": "git rev-parse HEAD"
        }}}
        

        【讨论】:

          猜你喜欢
          • 2022-10-14
          • 2017-05-09
          • 2023-02-03
          • 2012-06-29
          • 2010-12-13
          • 2012-08-01
          • 2012-06-03
          • 2020-09-07
          相关资源
          最近更新 更多