2016-10-22 45 views
2

有一个大的开源项目,我想对其进行更改。
由于成千上万的请求已经在等待处理,
很难知道某人是否已经做出类似的更改。有没有办法查看待处理的请求会影响特定文件?

我可以尝试根据关键字搜索问题,但我可能会忽略对文件进行更改的拉取请求。

如何根据文件名搜索哪些拉取请求对文件进行了更改?似乎没有办法从github做到这一点。有没有可以运行的git命令来打印所有已修改特定文件的pull-requests /分支?

+1

看看[这个答案](http://stackoverflow.com/questions/40182366/how-to-list-all-pull-request-with-count-of-files-changed/40185298#40185298)我发布到另一个问题。您可以使用几乎完全相同的技术,但不是计算每个PR中更改的文件,而是计算特定文件的“grep”。注意答案结尾的注意事项。 – larsks

回答

0

将拉取请求中的所有分支取回到本地回购中,并为它们中的每一个创建本地分支。

git fetch <remote-in-Nth-pull-request> <branch-in-Nth-pull-request>:prN 

如果有成千上万,N可能从0到几千。

假设你的主分支是master和其他所有分支,包括分叉的树枝都直接或间接地从master一些提交创建。

git log $(git merge-base master prN)..prN -- <foo/bar.c> 

该命令列出了所有更改foo/bar.cbranch-in-Nth-pull-requestmaster分叉后提交。如果输出不是空的,我们可以得出结论prN已经改变了foo/bar.c

运行此命令在一个循环,每prN,你可以得到已更改foo/bar.c

我想可能会有一些更容易的方法来完成这项工作的所有部门,但你可以有这样一个的试。

0

ElpieKay的回答基本上是我在评论中提出的建议; this answer有一个示例shell脚本,可以在很大程度上自动化该过程。

事实证明,获取打开的拉取请求列表相当容易;你可以在以下curl命令行拿开请求的JSON列表:

curl https://api.github.com/repos/<user>/<repo>/pulls 

例如:

curl https://api.github.com/repos/centos-opstools/opstools-ansible/pulls 

然后,您可以从提取拉入请求数使用类似jq(中-s参数curl只是抑制某些状态输出,你得到管道卷曲输出到另一个命令时):

curl -s https://api.github.com/repos/centos-opstools/opstools-ansible/pulls | 
jq '.[]|.number' 

然后,您可以采取的指挥和管它的输出转换成一个循环来获取只是那些拉请求,并检查它们感兴趣的文件:

curl -s https://api.github.com/repos/centos-opstools/opstools-ansible/pulls | 
jq '.[]|.number' | 
while read pr; do 
    git fetch origin refs/pull/$pr/head > /dev/null 
    if git show --pretty=format:'' --name-only FETCH_HEAD | grep -q $file_i_care_about; then 
    echo "PR $pr" 
    fi 
done 

这将产生输出,如:

PR 82 
PR 71 
PR 69 

上面假设变量file_i_care_about是一个包含您感兴趣的文件的变量。

相关问题