如何列出所有的拉取请求与数量的文件改变



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

在现实生活场景中解释的问题:假设对于某些myProject,有人提出了一个pull request number 100,其中15文件发生了变化。

我正在寻找一个命令,该命令列出了从1到100的所有拉请求,其中包含更改的文件计数。

请回答wrto Windows 7

  • PR号100在10个文件中有变化
  • PR号99有5个文件的变化
  • PR号98修改了6个文件
  • PR号96在22个文件中有更改
  • -
  • -
  • -
  • -
  • PR号50有7个文件的变化
  • PR Number 10在2个文件中有更改
  • PR 1有23个文件更改

您可以像这样获得远程拉取请求列表:

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

在标准输出上产生如下输出:

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存储库中作为refs持续存在,即使在它们已经关闭之后,所以这将总是迭代每个可用的拉请求,过去和现在。

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

适用于bitbucket

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

以上答案对我不起作用,所以我尝试了一个技巧来获得总拉请求。我开始探索git log,发现对于合并的PR,提交消息看起来像这样-

99041a85a Merged in pankaj_dev (pull request #3298)
如果你发现这里有任何技术上的不准确,请纠正我。但是我使用这个逻辑来获得合并pr的计数。
git log --author="Pankaj Tanwar" --oneline --shortstat | grep "pull request" | awk '{ total+=1;} END { print total; }'

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

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

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

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

最新更新