如何列出所有已更改文件的拉取请求

ank*_*itd 2 git version-control commit github pull-request

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

在现实生活场景中解释的问题:让我们说某些myProject人提出了一个拉动请求编号100,该编号在15文件中有变化.

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

请回答Windows 7的问题.

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

lar*_*sks 9

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

git ls-remote origin 'pull/*/head'
Run Code Online (Sandbox Code Playgroud)

(假设这origin是您的GitHub遥控器的名称)

对于给定的提交,您可以获得如下所示的已更改文件列表:

git show --pretty=format:'' --name-only <ref>
Run Code Online (Sandbox Code Playgroud)

您可以将以上信息放在一个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
Run Code Online (Sandbox Code Playgroud)

这在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
Run Code Online (Sandbox Code Playgroud)

(stderr上也有输出,你可以用标准的shell i/o重定向来处理).

这几乎可以满足您的需求,主要有一点需要注意:即使在关闭后,拉请求也会在远程GitHub存储库中保留为refs,因此这将始终迭代过去和现在的每个可用拉取请求.

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