【问题标题】:Github API - create branch?Github API - 创建分支?
【发布时间】:2021-06-23 12:57:15
【问题描述】:

似乎 v1、v2 和 v3 的“Repos”文档中缺少它...如何使用 Github API 创建分支?

【问题讨论】:

  • 很抱歉,在我发布我的答案后,我意识到你想要分支一个 repo。
  • 我正在尝试将其集成到管理应用程序中;只是假设我可以使用 API 来管理 Github 项目。

标签: git github


【解决方案1】:

V3 API 提到了branches in its reference page

URL 中的 ref 格式必须为 heads/branch,而不仅仅是 branch
例如,获取名为sc/featureA 的分支的数据的调用将是:

GET /repos/:user/:repo/git/refs/heads/sc/featureA

创建参考

POST /repos/:user/:repo/git/refs

参数

ref

完全限定参考的名称字符串(即:refs/heads/master)。如果它不是以'refs'开头并且至少有两个斜杠,它将被拒绝。

sha

将此引用设置为的 SHA1 值字符串

所以应该可以通过在 ref 参数中命名一个新的“/heads”来创建一个新分支。


Potherca points outworking test,使用 www.hurl.it 的服务(发出 HTTP 请求)

  • 找到要从中分支的修订版。
    无论是在 Github 上,还是从 Hurl 发出 GET 请求:

    https://api.github.com/repos/<AUTHOR>/<REPO>/git/refs/heads

  • 复制修订哈希

  • 从 Hurl 向 https://api.github.com/repos/<AUTHOR>/<REPO>/git/refs 发出 POST 请求,并将以下内容作为 POST 正文:

    {
        "ref": "refs/heads/<NEW-BRANCH-NAME>",
        "sha": "<HASH-TO-BRANCH-FROM>"
    }
    

    (显然,将 &lt;NEW-BRANCH-NAME&gt; 替换为您希望新分支具有的名称,并将 &lt;HASH-TO-BRANCH-FROM&gt; 替换为您想要分支的修订版的哈希)

    您需要使用 HTTP basic 并填写您的 Github 凭据才能访问 Github API。

  • 按下发送按钮,您的分支将被创建!

【讨论】:

  • 啊。参考文献,放置它的地方。谢谢!
  • 我试过了(使用hurl.it)。使用分支名称作为 ref(不要忘记将 refs/heads/ 放在它前面)并将提交的哈希作为 sha 分支从分支。发布它,我得到了 201 'Created' 响应。所以... 我可以验证它是否有效!
  • @VonC 酷!我希望你不介意,我将你的补充编辑成一个可靠的块引用。
  • @Aditya 用于创建分支,应该是一样的(除非分支 API 自从我 8 年前写这篇文章以来已经进化)
【解决方案2】:

这是我们在 GitHub 中创建用于创建分支的 API 时所有学生的常见问题

{
  "message": "Not Found",
  "documentation_url": "https://developer.github.com/v3"
}

为了解决在 Github 中创建存储库时出现的这个错误.....

  1. 首先在

    中创建个人令牌

    Github=>setting=>developerOption=>generatePersonalToken...

                     or 
    

    在 gitLogin bu Oauth 期间,当您传递 client_id 时,您传递 scope=repo(因为当你使用令牌时它允许所有存储库或 任何东西)

  2. 之后:点击 API(get)

    https://api.github.com/repos/&lt;your login name&gt;/&lt;Your Repository Name&gt;/git/refs/heads

  3. 你得到的回应是这样的

    Response => {
    [
    {
        "ref": "refs/heads/<already present branch name for ref>",
        "node_id": "jkdhoOIHOO65464edg66464GNLNLnlnnlnlna==",
        "url": " https://api.github.com/repos/<your login name>/<Your Repository Name>/git/refs/heads/<already present branch name for ref>",
        "object": {
            "sha": "guDSGss85s1KBih546465kkbNNKKbkSGyjes56",
            "type": "commit",
            "url": " https://api.github.com/repos/<your login name>/<Your Repository Name>/git/commits/guDSGss85s1KBih546465kkbNNKKbkSGyjes56"
        }
    }
    ]
    }
    
  4. 完成此过程再次命中 API (Post)

    https://api.github.com/repos/Bhupi2508/Test/git/refs...
    

    并像这样以 JSON 格式发送数据:

    {
        "ref": "refs/heads/<new branch name>",
        "sha": "4661616ikgohlKIKHBK4634GRGSD66"
    }
    

    然后你通过 API 在 GITHUB 中创建一个分支

    删除分支的过程只命中 DELETE(第一个)API

【讨论】:

    【解决方案3】:

    添加到@VonC 答案,这里是在 python 中工作的 sn-p。

    import requests
    headers = {'Authorization': "Token " + 'YOUR_TOKEN_HERE'}
    url = "https://api.github.com/repos/<USERNAME>/<REPO>/git/refs/heads"
    branches = requests.get(url, headers=headers).json()
    branch, sha = branches[-1]['ref'], branches[-1]['object']['sha']
    res = requests.post('https://api.github.com/repos/<USERNAME>/<REPO>/git/refs', json={
        "ref": "refs/heads/newbranch",
        "sha": sha
    }, headers=headers)
    print(res.content)
    

    【讨论】:

      【解决方案4】:

      努力为私人回购做这件事,因此回答了相同案例的问题:

      对于私有存储库,您需要通过“用户名”和“密码”或 OAUTH 对请求进行身份验证。以下步骤;

      1. 在 github 开发者设置中找到您帐户的个人访问令牌。

      2. 使用基本分支名称发出经过身份验证的 GET 请求。

      3. 从 GET 请求的响应中,使用 jq 过滤提交 SHA。

      4. 发布新分支名称并将 SHA 作为 POST 请求中的主体提交到 github。

      在行动:

      TOKEN=<GITHUB-AUTH-TOKEN-VALUE>
      Previous_branch_name=ABC
      New_branch_name=XYZ
      
      SHA=$(curl -H "Authorization: token $TOKEN" https://api.github.com/repos/<REPO>/git/refs/heads/$Previous_branch_name | jq -r '.object.sha')
      
      curl -X POST -H "Authorization: token $TOKEN" \
      -d  "{\"ref\": \"refs/heads/$New_branch_name\",\"sha\": \"$SHA\"}" \ "https://api.github.com/repos/<REPO>/git/refs"
      

      【讨论】:

      • 你的代码看起来不错,我正在努力达到同样的效果,你能详细解释一下你的代码吗?当我执行代码时,它会引发如下所述的错误: 注意:我能够获取 SHA 值。 400 Bad Request

        Bad Request

        您的浏览器发送了此服务器无法理解的请求。

        curl: (56) Recv failure: Connection reset by peer
      • 假设您正在从 shell 或某些工具(如邮递员等)发出请求来处理相同的内容。如果您收到 400 错误请求,请检查 POST 请求中的 URL。要创建分支,您需要在 POST 请求的数据中提供新分支名称和旧分支的 SHA。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      • 2020-12-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 2022-12-08
      • 1970-01-01
      相关资源
      最近更新 更多