我在 GitHub 上托管了项目。我的存储库已禁用推送到分支
main
,只有拉取请求可以合并到 main
。我有一个要求,即给定存储库下的文件,我想确定哪个 PR 最后添加/更新/删除了该文件。我没有找到 GitHub API 来执行此操作。有办法吗?
我可以想到三个选择:
在本地使用Git查看修改文件的最新提交的提交标题(假设标题中没有手动删除PR号):
grep -Po '#\K\d+(?=\)$)' <<< "$(git log --format=%s --max-count=1 -- FILE)"
正则表达式查找
#
后跟一位或多位数字,然后是 )
和行尾。 #
和 )
未被捕获。因此,标题 Add a new feature (#123)
将变为 123
。
使用 REST API 获取文件的最新提交,并使用 jq 提取 PR 编号(再次假设未修改提交标题以将其删除):
gh api repos/super-linter/super-linter/commits?path=lib/linter.sh \
--jq '
first.commit.message
| split("\n")
| first
| capture("\\(#(?<n>\\d+)\\)$").n
'
更健壮,因为它不依赖于提交标题的字符串解析,但也更昂贵:检索拉取请求并按它们接触的文件进行过滤,然后获取您感兴趣的文件的最新文件的编号再次以 super-linter 和
lib/linter.sh
为例:
gh pr list --base main --state merged --json files,mergedAt,number --limit=50 \
--jq '
map(select(
.files
| map(.path)
| select(index("lib/linter.sh") >= 0)
))
| sort_by(.mergedAt)
| last.number
'
如果文件有一段时间没有修改,您可能需要调整
--limit
值。要参数化文件名,您可以在环境中设置它,然后通过 $ENV
对象引用它,例如
file='lib/linter.sh' gh pr list ... --jq '... $ENV.file ...'