我该如何导出一个提交记录的日志,只显示给定命名空间的注释?
没有注释或不属于给定命名空间的注释应被过滤。
在文本转储中,我不仅想要注释,还想要提交信息。
我已经尝试了show refs/notes/,我相信解决方案可能就在那里,而不是用"git log"。然而,我仍然有一些问题找到正确的命令,同时也显示所有提交。
我该如何导出一个提交记录的日志,只显示给定命名空间的注释?
没有注释或不属于给定命名空间的注释应被过滤。
在文本转储中,我不仅想要注释,还想要提交信息。
我已经尝试了show refs/notes/,我相信解决方案可能就在那里,而不是用"git log"。然而,我仍然有一些问题找到正确的命令,同时也显示所有提交。
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
。
-r
标志(或 --no-run-if-empty
)可以解决在 GNU xargs
中的“轻微问题”。 - Mikko Rantalainen你可以在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 将不会被调用。
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
选项来格式化输出,以满足您的需求。
git notes list
吗? - Carlos Campderrós