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

how to list all pull request with count of files changed

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

在现实生活中解释的问题:假设有人 myProject 提出了一个拉取请求编号 100,它在 15 个文件中发生了变化。

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

请回答Windows 7.

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

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

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

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

git show --pretty=format:'' --name-only <ref>

你可以把以上信息一起写成一个shell脚本:

    git ls-remote origin 'pull/*/head' | awk '{print }' |
    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 存储库中作为引用持续存在,即使它们已关闭,因此这将始终迭代每个可用的拉取请求,过去和现在。

您可以通过在本地缓存有关您之前检查过的最高 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; }'

要计算总提交量和贡献的代码总行数,请查看 this blog

您可以通过以下命令获取 pull-request 列表和文件更改。

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

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