libgit2sharp什么是正确的sha提供给GitHub API合并pull-request?

时间:2015-07-18 07:14:52

标签: git git-merge github-api sha libgit2sharp

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"   }

1 个答案:

答案 0 :(得分:3)

Pull Request上有两个不同的提交和sha。

当利用GitHub API合并打开的Pull请求时,json有效负载的可选sha属性应该与GitHub 目前已知的分支提示的sha匹配。

如果您的本地存储库与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);