如何转储我的提交日志,仅显示带有给定命名空间注释的提交日志?
没有注释的提交,或者不属于给定命名空间的注释应该被过滤掉
在文本转储中,我不仅想要注释,还想要提交信息。
我玩过: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
要选择一个特定的命名空间,添加一个--ref=namespace
到git notes
.
$ [ "$(git notes --ref=namespace)" = "" ] || git notes --ref=namespace | cut -d' ' -f2 | xargs git show
初始测试 [...] 防止了一个小问题:如果不传递任何参数, git show 将显示当前结帐。因此,如果没有注释,您将获得误导性输出。初始测试没有问题:如果测试失败,即如果没有注释,则不会调用 git show。
您可以向 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
仅带有附加注释的提交的 -style 报告,那么您可以使用--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
选项来根据需要格式化输出。