【问题标题】:libgit2sharp what is correct sha to supply to GitHub API merge pull-request?libgit2sharp 提供给 GitHub API 合并拉取请求的正确 sha 是什么?
【发布时间】:2015-07-18 07:14:51
【问题描述】:

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": "Head 分支已修改。查看并尝试合并 再次。", "documentation_url": “https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button” }

【问题讨论】:

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


    【解决方案1】:

    当涉及到拉取请求时,有两种不同的提交和 shas 发挥作用。

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

    如果您的本地存储库与 GitHub 对您的存储库的了解保持同步,那么这绝对应该与 repo.Branches["your_topic_branch"].Tip.Sha 返回的内容相匹配。

    注意:为了确保 GitHub 已知的 PR 头与您的本地分支提示匹配,使用 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);
    

    【讨论】:

    • github 支持告诉我,merge-pull-request api sha(这是一个可选参数)应该设置为 pull-request 源分支上最近提交的 sha,因为它存在在github上
    • @BaltoStar 我已经用更多故障排除技巧更新了答案。
    • 我的分支没有手动添加提交,如果正在进行的请求正在进行中,我的应用程序会拒绝后续请求——在任何给定时间只强制执行一个正在进行的 git 客户端——所以当我的应用程序以编程方式尝试 commit/push/create pull-request ,它是本地的 Branch.Tip.Sha 应该始终匹配 GitHub 的虚拟合并 pull-request 分支上的最新 sha,对吗?
    • 听起来正确。当你获取时,你会得到什么? “一切都是最新的”?
    • 通常响应是“一切都是最新的”,但偶尔我会得到 409 - 这完全令人困惑,因为我找不到任何因果关系(到目前为止)
    猜你喜欢
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2022-08-14
    • 2013-02-02
    • 2021-12-13
    • 1970-01-01
    • 2013-11-08
    相关资源
    最近更新 更多