仅显示带有注释的提交记录的git日志过滤器

6

我该如何导出一个提交记录的日志,只显示给定命名空间的注释?

没有注释或不属于给定命名空间的注释应被过滤。

在文本转储中,我不仅想要注释,还想要提交信息。

我已经尝试了show refs/notes/,我相信解决方案可能就在那里,而不是用"git log"。然而,我仍然有一些问题找到正确的命令,同时也显示所有提交。


你尝试过使用 git notes list 吗? - Carlos Campderrós
3个回答

7

git notes将为您提供每个注释的ID以及所应用的对象。因此,第二列是您想要的。

$ git notes
f5ac8874676de3029ffc8c31935644ff7c4deae0 07ca160c58cf259fe8bb5e87b9d9a7cbf8845f87
62ecfc95355587d6d1f779fcaca6e4f53d088ccc eb6c60b9dcb56219d9d882759c0bf928f6d6c3fa

使用 cut 命令抓取最后一列,并将其传递给 git show 命令。
[ "$(git notes)" = "" ] || git notes \
| cut -d' ' -f2 \
| xargs git show

如果要选择特定的命名空间,请在 git notes 命令中添加 --ref=namespace 参数。

[ "$(git notes --ref=namespace)" = "" ] || git notes --ref=namespace \
| cut -d' ' -f2 
| xargs git show

初始测试[...]可以防止一个小问题:如果没有传递参数给git show,它将显示当前的检出。因此,如果没有笔记,你将会得到误导性的输出。使用初始测试就不会有这个问题:如果测试失败,即如果没有笔记,则不会调用git show


3
-r 标志(或 --no-run-if-empty)可以解决在 GNU xargs 中的“轻微问题”。 - Mikko Rantalainen

0

你可以在Schwern的答案中添加一个测试:

[ "$(git notes)" = "" ] || git notes \
| cut -d' ' -f2 \
| xargs git show

或者选择特定的命名空间:

[ "$(git notes --ref=namespace)" = "" ] || git notes --ref=namespace \
| cut -d' ' -f2 \
| xargs git show

然后,如果初始测试失败,即没有笔记,git show 将不会被调用。


0
如果你想要一个类似于 git log 的报告,仅显示附有注释的提交记录,那么你可以使用 --no-walk 参数来告诉 git log 仅限制报告中列在命令行上的提交记录。例如:
git notes list \
| cut -d' ' -f2 \
| xargs --no-run-if-empty git log --no-walk=sorted

我添加了--no-walk=sorted以按提交时间排序输出,而不是git notes输出的任意顺序。

当然,您可以添加任何其他git log选项来格式化输出,以满足您的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接