如何列出所有拉取请求以及更改文件的数量

11

我正在寻找一些命令,它可以告诉我单个拉取请求中提交的文件数。我想知道单个拉取请求中的文件数量,从一开始就分开。

实际场景中的问题解释:假设对于一些 myProject,有人提出了一个拉取请求编号为 100,其中涉及了 15 个文件的更改。

我正在寻找一个列出所有拉取请求的命令,从1到100,以及更改文件的计数。

请按照Windows 7回答。

即:

  • PR编号100中更改了10个文件
  • PR编号99中更改了5个文件
  • PR编号98中更改了6个文件
  • PR编号96中更改了22个文件
  • -
  • -
  • -
  • -
  • PR编号50中更改了7个文件
  • .
  • .
  • .
  • .
  • PR编号10中更改了2个文件
  • .
  • .
  • .
  • .
  • PR编号1中更改了23个文件
4个回答

27
你可以像这样获取远程拉取请求的列表:
git ls-remote origin 'pull/*/head'

(假设origin是您的GitHub远程仓库名称)

对于给定的提交,您可以像这样获取更改文件的列表:

git show --pretty=format:'' --name-only <ref>
您可以将上述信息汇总到一个shell脚本中:
    git ls-remote origin 'pull/*/head' | awk '{print $2}' |
    while read ref; do
      pr=$(echo $ref | cut -d/ -f3)
      git fetch origin $ref > /dev/null
      files_changed=$(git show --pretty=format:'' --name-only FETCH_HEAD|wc -l)
      echo "PR number $pr has changes in $files_changed files"
    done

它会在标准输出(stdout)上产生像这样的输出:

PR number 1 has changes in 4 files
PR number 10 has changes in 1 files
PR number 11 has changes in 4 files
PR number 12 has changes in 7 files
PR number 13 has changes in 5 files

(stderr也会有输出,您可以使用标准 shell I/O 重定向来处理。)

这基本上可以做到您想要的事情,但有一个主要的警告:即使已关闭,拉取请求在您的远程 GitHub 存储库中仍将作为 ref 持续存在,因此它将始终遍历每个可用的拉取请求,无论是过去还是现在。

您可以通过本地缓存关于先前检查过的最高 PR 编号的信息来解决此问题,然后跳过所有较低的 PR。


谢谢你的回答。我正在使用Windows 7,不确定如何运行这些东西,或者如何在Windows 7上运行shell脚本。 - ankitd
我应该将origin作为暂存路径给develop分支吗? - ankitd
如果这些东西在Windows上无法运行,我们是否可以通过“Source Tree”获取这些东西? - ankitd
在Windows 10上运行Bash是受支持的,您需要激活Windows子系统Linux。要在Windows 7上运行Bash,请安装Git for Windows(实际上是为Windows提供的“Bash + Git”)。 - Samuel Lelièvre
@SlavaAbakumov 这个答案也快五年了 :). 现代的解决方案可能涉及到 gh 命令行客户端,当然,现在和这个答案写出来时,更灵活的选择可能是直接利用 GitHub 的 REST API。 - larsks
显示剩余4条评论

4

这适用于 Bitbucket。

git ls-remote origin 'pull-requests/*'

尝试运行以下命令:hub pr list -s all -f "%cD %pC%>(8)%i%Creset %t% l%n" - Prasanna K Rao
这里的hub是来自Github的CLI工具。不过可能也可以与BitBucket一起使用,但不确定。 - Prasanna K Rao
Hub将Bitbucket支持标记为“不修复”https://github.com/github/hub/issues/140 - Ted

0

您可以通过以下命令获取拉取请求列表和文件更改。

brew install gh
gh pr list
gh pr view 3 --json changedFiles # 3 is PR number

更多信息 - https://cli.github.com


0
以上的答案对我没有用,所以我尝试了一个小技巧来获取提出的总拉取请求。我开始探索git log,发现对于已合并的PR,提交消息看起来像这样 -
99041a85a Merged in pankaj_dev (pull request #3298)

如果您发现此处有任何技术上的不准确之处,请纠正我。但是我使用了这个逻辑来获取我的合并请求的计数。

git log --author="Pankaj Tanwar" --oneline --shortstat | grep "pull request" | awk '{ total+=1;} END { print total; }'

要计算总提交次数和代码行数,请查看此博客


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