【发布时间】:2021-06-23 12:57:15
【问题描述】:
似乎 v1、v2 和 v3 的“Repos”文档中缺少它...如何使用 Github API 创建分支?
【问题讨论】:
-
很抱歉,在我发布我的答案后,我意识到你想要分支一个 repo。
-
我正在尝试将其集成到管理应用程序中;只是假设我可以使用 API 来管理 Github 项目。
似乎 v1、v2 和 v3 的“Repos”文档中缺少它...如何使用 Github API 创建分支?
【问题讨论】:
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 out 到 working 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>" }(显然,将
<NEW-BRANCH-NAME>替换为您希望新分支具有的名称,并将<HASH-TO-BRANCH-FROM>替换为您想要分支的修订版的哈希)您需要使用 HTTP basic 并填写您的 Github 凭据才能访问 Github API。
按下发送按钮,您的分支将被创建!
【讨论】:
refs/heads/ 放在它前面)并将提交的哈希作为 sha 分支从分支。发布它,我得到了 201 'Created' 响应。所以... 我可以验证它是否有效!
这是我们在 GitHub 中创建用于创建分支的 API 时所有学生的常见问题
{
"message": "Not Found",
"documentation_url": "https://developer.github.com/v3"
}
为了解决在 Github 中创建存储库时出现的这个错误.....
首先在
中创建个人令牌Github=>setting=>developerOption=>generatePersonalToken...
or
在 gitLogin bu Oauth 期间,当您传递 client_id 时,您传递 scope=repo(因为当你使用令牌时它允许所有存储库或 任何东西)
之后:点击 API(get)
https://api.github.com/repos/<your login name>/<Your Repository Name>/git/refs/heads
你得到的回应是这样的
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"
}
}
]
}
完成此过程再次命中 API (Post)
https://api.github.com/repos/Bhupi2508/Test/git/refs...
并像这样以 JSON 格式发送数据:
{
"ref": "refs/heads/<new branch name>",
"sha": "4661616ikgohlKIKHBK4634GRGSD66"
}
然后你通过 API 在 GITHUB 中创建一个分支
删除分支的过程只命中 DELETE(第一个)API
【讨论】:
添加到@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)
【讨论】:
努力为私人回购做这件事,因此回答了相同案例的问题:
对于私有存储库,您需要通过“用户名”和“密码”或 OAUTH 对请求进行身份验证。以下步骤;
在 github 开发者设置中找到您帐户的个人访问令牌。
使用基本分支名称发出经过身份验证的 GET 请求。
从 GET 请求的响应中,使用 jq 过滤提交 SHA。
发布新分支名称并将 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"
【讨论】:
您的浏览器发送了此服务器无法理解的请求。