【问题标题】:git for-each-ref - filter results by agegit for-each-ref - 按年龄过滤结果
【发布时间】:2019-10-31 09:42:03
【问题描述】:

我正在使用来自here 的以下命令:

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

有没有办法按特定日期对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'

但最好只给出一个特定日期并在该日期之前或之后获得所有结果。

编辑:如果给定的结束日期不存在,则上述使用 sed 的方法不起作用,因为 sed 只是一个流编辑器。例如,如果生成的 sed 字符串是 '/2017-*/,/2018-10-*/p',但没有匹配 2018-10-* 的条目(2018 年 10 月没有提交的分支),那么它将获得 2017 年以后的所有结果。也就是说,它不是真正的日期范围计算;这是一个简单的字符串匹配,当它找到与右侧匹配的第一个条目时停止。

【问题讨论】:

  • 以 seconds-since-epoch 格式获取作者日期,使用它来选择您感兴趣的日期 - 这是一个简单的日期 >= start && state 然后格式化日期戳以使其美观。

标签: git


【解决方案1】:

git-for-each-refgit-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 }'

或者,此命令将仅打印本地分支的名称,其最新提交日期(与作者日期不同)早于 AWK 程序中的日期:

git branch --sort=-committerdate --format='%(committerdate:short) %(refname:short)' \
    | awk '{ if ($1 < "2021-11-23") { print $2 } }'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    相关资源
    最近更新 更多