GitHub API要求将合并请求提交为
PUT /repos/:owner/:repo/pulls/:number/merge
请求正文json
{
"commit_message": "blah",
"sha": "{SHA that pull request head must match to allow merge}",
}
提交后,推送,创建PR,libgit2sharp属性提供正确的sha?
对于当前分支,它显示Branch.Tip.Sha
是正确的值,但我收到了响应错误:
{" message":"主干分支被修改。查看并尝试合并 再次。"," documentation_url": " https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button" }
答案 0 :(得分:3)
Pull Request上有两个不同的提交和sha。
分支的提示(您在分支上推送的最后一次提交)
GET /repos/:owner/:repo/git/refs/:ref
(其中:ref
应为pull/{number}/head
格式)GitHub在场景后面动态创建的虚拟合并提交,以确定可合并性并允许CI服务器运行您的构建/测试,就好像您的分支已经合并(因此,事先检测到任何潜在问题)
GET /repos/:owner/:repo/git/refs/:ref
(其中:ref
应为pull/{number}/merge
格式)当利用GitHub API合并打开的Pull请求时,json有效负载的可选sha属性应该与GitHub 目前已知的分支提示
如果您的本地存储库与GitHub对您的存储库的了解同步,那么这绝对应该与repo.Branches["your_topic_branch"].Tip.Sha
返回的内容相匹配。
注意:为了确保PR的GitHub已知头部与您的本地分支提示匹配,使用LibGit2Sharp,您可以通过直接获取特殊内容来检索指向提交的GitHub PR合并/头部引用命名空间以下代码演示了此
var remoteName = "origin"; // or whatever your remote is named
var remote = repo.Network.Remotes[remoteName];
var prNumber = "1123"; // or whatever your pr number is
// Build the refspec
string refSpec = string.Format("+refs/pull/{1}/*:refs/remotes/{0}/pull/{1}/*",
remoteName, prNumber);
// Perform the actual fetch
repo.Network.Fetch(remote, new[] { refSpec });
Console.WriteLine(repo.Branches[string.Format("pull/{0}/merge", prNumber)].Tip.Sha);