如何通过Github API更新一个派生库的原始版本

7
我已经通过Github API创建了一个GitHub存储库的分支。现在,我想从原始存储库中拉取更新到该分支。在我的使用情况下,这应该总是快进。我对原始存储库有读取访问权限,并对该分支具有读写权限。
我考虑过创建拉取请求,然后接受它(这两个步骤均可以通过API完成),但这会产生噪音(拉取请求被创建和销毁),并且似乎不正确。
是否有任何通过API完成此操作的方法?
4个回答

18

我没有内部消息,因此这可能是将来会被删除的缺陷。在那之前:

Github提供整个fork网络中所有提交的API; 因此,接受提交哈希的API将能够使用上游或其他fork的哈希(这在repos/commits/compare创建拉请求中有明确说明)。

因此,有几种仅通过API更新的方法:

  1. 使用Git数据API:如果您不更改自己的fork主分支,则通常这是最佳选择。

    1. 获取上游引用/repos/upstream/repo/git/refs/heads/master,并从中获取哈希
    2. 使用相同的哈希更新您的fork PATCH /repos/my/repo/git/refs/heads/master
  2. 使用更高级别的合并API:这将创建一个合并提交,有些人喜欢。

    1. 像以前一样获取上游引用
    2. 在您的存储库中创建一个到分支master的合并。
  3. 向自己发起拉请求并通过API合并:这将创建一个合并提交和拉请求。

    1. 创建拉请求:POST到/repos/your/repo/pulls,其中head = "upstream:master"
    2. 从响应中获取PR URL,
    3. 合并它:PUT到/repos/your/repo/pulls/number/merge

“upstream:master” 的记法可能对选项1和2也有效,可以节省一个 API 调用。


谢谢!我一直在做第三种方法,但我没有意识到第一种方法是可能的,而且它更适合我的需求(它总是会快进提交)。 - Thomas Parslow
@ThomasParslow,你有没有成功地让它工作?如果是这样,你可以发布这个脚本,当然不要包含任何敏感信息。 - johnny 5
这是我正在使用的项目,它是MIT许可的,所以请随意使用 :) https://github.com/almost/hubbub - Thomas Parslow
我尝试了#1,不幸的是,SHA没有从“上游”共享到源代码。我猜#2也有同样的问题。唯一剩下的选择是#3。 - Ideabile
1
#1 百分之百有效。我没有特别尝试PATCH,但是创建一个引用源存储库中的SHA的新引用是有效的。 - Shawn Erquhart

2
现在在GitHub API中可以实现这一点;这里是文档链接,以及这里是公告链接
简而言之,使用正确的身份验证和有效载荷{ "branch": "分支名称" },向/repos/{owner}/{repo}/merge-upstream发起POST请求。

1

目前不可能,但我已将此添加到我们的API愿望清单中。:)


这并没有提供问题的答案。如果您要对作者进行批判或请求澄清,请在他们的帖子下留言。 - David Faber
2
当然可以。问题是“是否有通过API实现这一点的方法”。答案是“没有”。 - Sneftel
1
@DavidFaber 我的回答并不是批评或请求澄清。据我所知,通过GitHub API是不可能实现的,而且我确实向API团队提出了这个请求(我在GitHub工作)。 - Ivan Zuzak
也许这不是我希望得到的答案,但它是正确的答案。现在接受它,谢谢!(另外,你知道这个功能什么时候会从愿望清单上实现并加入API吗?) - Thomas Parslow
@ThomasParslow 我认为当Web UI也提供这样的功能时,会出现这种情况。但我不能做出任何承诺或讨论时间表。(不过,我不认为这个功能会在不久的将来可用)。 - Ivan Zuzak
谢谢@IvanZuzak,这很有用。我会相应地计划。 - Thomas Parslow

0

这对我很有用,因为我需要从上游更新但不需要合并请求提交。我的参考是master

  1. 创建一个拉取请求POST /repos/:myUsername/:myRepo/pulls
    • 输入:{title, head: 'ownerFromUpStream:master', base: 'master', ...}
  2. 从拉取请求中获取sha(例如response.data.head.sha
  3. PATCH /repos/:myUsername/:myRepo/git/refs/master
    • 参数:{sha: shaFromPullRequest}

文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接