我在这里使用以下命令:
git for-each-ref --format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p) %(align:25,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=authordate refs/remotes
Run Code Online (Sandbox Code Playgroud)
有没有办法authordate按特定日期排序?
例如,仅显示 X 天或几个月前的结果,或者可能是在给定日期之后的结果?我正在考虑使用,grep但我希望有一种方法可以实际解析给定的日期来进行计算,而不仅仅是字符串匹配。
我想出了以下使用方法sed:
git for-each-ref --format='%(color:cyan)%(authordate:format:%Y-%m-%d %I:%M %p) %(align:25,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=authordate refs/remotes | sed -n '/{start_year}-*/,/{end_year}-{end_month}-*/p'
Run Code Online (Sandbox Code Playgroud)
但最好只给出一个特定日期并获得该日期之前或之后的所有结果。
编辑:如果给定的结束日期不存在,上面使用的方法sed将不起作用,因为 sed 只是一个流编辑器。例如,如果生成的 sed 字符串是,'/2017-*/,/2018-10-*/p'但没有匹配的条目2018-10-*(2018 年 10 月没有提交的分支),那么它将获得 2017 年以后的所有结果。也就是说,它不是真正的日期范围计算;这是一个简单的字符串匹配,当它找到与右侧匹配的第一个条目时停止。
git-for-each-ref和git-branch命令都不提供按日期过滤的选项。
然而,使用 AWK 过滤其中任何一个的输出都非常简单,但首先我们需要使用 ISO 8601 日期格式 ( yyyy-MM-dd) 以使比较变得容易。另外,颜色在通过 AWK 后将无法保存(好吧,我不知道如何让它做到这一点),所以我们还不如丢失它。
以下是如何使用您的格式执行此操作:
git for-each-ref \
refs/remotes \
--sort=authordate \
--format='%(authordate:format:%Y-%m-%d %I:%M %p) %(align:25,left)%(authorname)%(end) %(refname:strip=3)' \
| awk '{ if ($1 < "2021-11-23") print $0 }'
Run Code Online (Sandbox Code Playgroud)
或者,此命令将仅打印其最新提交日期(与作者日期不同)早于 AWK 程序内部日期的本地分支的名称:
git branch --sort=-committerdate --format='%(committerdate:short) %(refname:short)' \
| awk '{ if ($1 < "2021-11-23") { print $2 } }'
Run Code Online (Sandbox Code Playgroud)