我想获取在特定日期发生的 github 存储库所有分支的所有提交。我可以使用“since”和“until”参数轻松获取某个日期的分支提交,但我的问题是我正在使用一个包含近 1000 个分支的存储库,但其中只有不到 10% 是活动的,并且它该 API 似乎不允许您按活动分支或上次更新进行过滤。我只能按字母顺序列出每个分支,因此目前我被迫迭代每个分支并检查特定日期的提交,即使其中大多数都是过时的分支。如果我可以按更新日期对分支进行排序,我将只获取所有最近的分支,直到到达自开始日期之前尚未更新的分支。我只能使用 API 按字母顺序列出存储库的分支,并且无法按任何日期或任何内容进行过滤,因此目前我被迫迭代每个分支并检查特定日期的提交,即使其中大多数是陈旧的分支。
在 Github 网站上,您可以轻松进入存储库的分支并查看按上次提交日期排序的分支,您还可以仅查看活动分支,所以我不知道为什么我无法使用 API 执行此操作。我想避免进行任何网络抓取,因为我需要脚本每天都可靠运行。
使用 git 本身可以更轻松、更快地解决此任务:
git for-each-ref refs/heads/ \
--sort=-committerdate \
--format="%(refname:short) %(committerdate:relative)" \
--count=100 | \
grep "days ago" | \
awk -v n=7 '$2 ~ /[0-9]+/ && $2 > n {print $1}'
此命令列出了按最后提交日期排序的 100 个分支。输出的形式为:
branch1 xxx hours ago
branch2 yyy days ago
grep
当分支至少一天时过滤掉行。
awk
用于过滤天数小于 7 的行。