我正在使用此命令来获取项目的版本(标签)已经发布的时间。
git log --tags --simplify-by-decoration --pretty="format:%ci %d"
输出是这样的:
2013-06-08 09:11:40 +0200 (2.1.4)
2013-05-26 17:31:17 +0200 (2.1.3)
2013-05-26 10:21:49 +0200 (2.1.2)
2013-05-25 10:07:49 +0200 (2.1.1)
2013-05-23 22:47:11 +0200 (2.1.0)
2013-04-30 18:20:53 +0200 (2.0.11, origin/2.0_bugfix)
2013-04-30 10:47:51 +0200 (2.0.10)
2013-04-13 14:04:35 +0200 (2.0.9)
2013-02-17 20:15:22 +0100 (2.0.8)
那么我该怎么办才能获得他们在同一个月没有发布的版本?我想实现这个输出。
2013-06-08 09:11:40 +0200 (2.1.4)
2013-05-23 22:47:11 +0200 (2.1.0)
2013-04-13 14:04:35 +0200 (2.0.9)
2013-02-17 20:15:22 +0100 (2.0.8)
答案 0 :(得分:1)
[编辑添加:正如评论者所说,git中没有“已发布”的概念;我假设你的git log
已经做了你想要的任何魔法,除了跳过给定月份的最后一行以外的所有魔法。]
我怀疑git中有什么内容可以做到这一点,但是在awk中很容易做到。我将git log
输出保存在文件log
中:
$ awk -F- '$2 != prev { if (keep) print keep; keep = $0; prev = $2 } \
END { print keep }' < log
2013-06-08 09:11:40 +0200 (2.1.4)
2013-05-26 17:31:17 +0200 (2.1.3)
2013-04-30 18:20:53 +0200 (2.0.11, origin/2.0_bugfix)
2013-02-17 20:15:22 +0100 (2.0.8)
(请注意,我不知道你的缩进意味着什么,所以我没有试图制作它。)
awk命令是:
'-'
($1
为2013
,$2
为06
等)$2
与之前的$2
不同,则每行$2
值这假设至少有一条线;如果需要空if (keep)
输出,请添加git log
。 prev
和keep
的内容是确保我们只打印给定月份的 last 行,如示例输出中所示。
再次编辑:哎呀,我打印了第一个行而不是最后一行,这意味着keep
位是愚蠢的,当我们遇到时我们只能print
这一行它。您的示例输出打印 last 行,这意味着我们要在keep
时替换$2==prev
:
awk -F- '\
$2 == prev { keep = $0; } \
$2 != prev { if (keep) print keep; keep = $0; prev = $2 } \
END { print keep }'
无论如何,这是一般的想法:一旦你拥有了你想要的所有标签日志,用awk或类似的过滤它们。