问题描述
我看到对于拉取请求的提交,根据文档List commits on a Pull Request,最大限制为250;如果拉取请求超过250个提交,则建议另一个端点为:List Commits
最多列出250个关于请求请求的提交。接收拉取的完整提交列表 请求超过250个提交,请使用“列表提交”端点。
GET /repos/:owner/:repo/pulls/:pull_number/commits
但是,我看不到如何使用列表提交端点来确定它是否与拉取请求有关。
编辑:想知道,我是否应该依靠git命令代替。即克隆存储库,运行git log以获得所有提交的列表。还有更好的方法吗? 问题:不是所有提交都会被推送到请求请求吗?
此外,我正在寻找一种方法,以查看自从首次提出请求以来是否有任何新的提交增量添加到拉取请求中。 对于处理评论注释并将其添加到现有请求请求的情况,在这种情况下,我希望仅验证增量更改。 关于如何实现这一目标的任何指针或文件?
解决方法
您可以使用GET /repos/:owner/:repo/commits/:commit_sha/pulls
列出与提交相关联的请求请求,这将显示与给定提交相关联的请求请求。这确实意味着您需要检查每个提交,以查看其是否与PR关联。这样会产生大量的过量网络流量,因此,除非绝对必要,否则我不建议您使用此端点查找与PR相关的提交。
我发现为PR查找新提交的最佳解决方案是在创建请求请求后获取分支的所有提交。您需要GET
PR,拉出created_at
字段,并使用commits端点从分支中检索提交,然后将PR的created_at
字段用于提交请求正文中的since
字段,并指定目标分支。
github documentation指示如何在本地检查拉取请求:
在远程仓库上,拉取请求的当前“活动提交”存储在refs/pull/<id>/head
下;合并请求合并后,另一个参考出现在refs/pul/<id>/merge
。
引用文档:您可以在本地副本上获取单个合并请求:
根据请求请求的ID号获取对请求的引用,从而在该过程中创建一个新分支。
$ git fetch origin pull/ID/head:BRANCHNAME
您现在可以比较BRANCHNAME
和master
(*)来查看合并请求中的提交列表:
git log master..BRANCHNAME
git rev-list master..BRANCHNAME
请注意,您可以选择将pull/ID/head
提取到分支以外的其他引用中:
git fetch origin pull/ID/head:refs/remotes/origin/pr/ID
# now the pr appears as 'origin/pr/ID'
(*),如果目标分支不是master
,则需要从api中获取此信息。
您还可以将refspec设置为自动获取所有合并请求;例如参见this gist:
在.git / config文件中找到github遥控器的部分。看起来像这样:
[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = [email protected]:joyent/node.git
现在将
fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
行添加到此部分。显然,更改github URL以匹配您项目的URL。最终看起来像这样:[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = [email protected]:joyent/node.git fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
下一个git fetch
将下载所有请求请求(关闭,合并和一起打开)的所有引用。
我在refspec中看不到请求请求的历史记录:
- 您可以使用上述refspec来建立仓库的副本,
- 和github上的一个钩子,每当对请求请求进行推送时,钩子就会通知此克隆,
- 以便克隆在收到通知时仅运行
git fetch origin
那样:拉取请求的历史记录将出现在其引用日志中:
git reflog origin/pr/<id>
更直接的方法:使用钩子,您可以访问正在推送的提交,并且可以更新拉取请求,因此您可以设置一些内容来存储该拉取请求的历史记录。