我有一个带有自动流程的存储库,该流程创建了很多标签。例:
* 5391e27 - (HEAD -> master, origin/master) Add a webhook to notify Phabricator of builds (2 hours ago) <Phil Frost>
* c380a48 - Retry downloading Selenium 3 times (2 hours ago) <Phil Frost>
| * 542731c - (tag: phabricator/diff/962) Retry downloading Selenium 3 times (6 hours ago) <Phil Frost>
|/
* 59509a3 - (tag: phabricator/base/962) Notify only on "master" branch (7 hours ago) <Phil Frost>
* 1504aa6 - Fix a few errors and omissions in README (7 hours ago) <Phil Frost>
| * a52940d - (tag: phabricator/diff/959) Notify only on "master" branch (3 days ago) <Phil Frost>
|/
| * 25838f0 - (tag: phabricator/diff/958) Notify only on "master" branch (3 days ago) <Phil Frost>
|/
* d7b3f72 - (tag: phabricator/base/959, tag: phabricator/base/958) Execute arbitrary commands in the test container (3 days ago) <Phil Frost>
Run Code Online (Sandbox Code Playgroud)
通常,我并不关心所有这些phabricator/*/*标签,因此我想查看所有引用的日志,除了那些。换句话说,我想看看:
* 5391e27 - (HEAD -> master, origin/master) Add a webhook to notify Phabricator of builds (2 hours ago) <Phil Frost>
* c380a48 - Retry downloading Selenium 3 times (2 hours ago) <Phil Frost>
* 59509a3 - Notify only on "master" branch (7 hours ago) <Phil Frost>
* 1504aa6 - Fix a few errors and omissions in README (7 hours ago) <Phil Frost>
* d7b3f72 - Execute arbitrary commands in the test container (3 days ago) <Phil Frost>
Run Code Online (Sandbox Code Playgroud)
我认为这可以做到:
git log --exclude='refs/tags/phabricator/*/*' --all
Run Code Online (Sandbox Code Playgroud)
不幸的是,--exclude我尝试使用它似乎没有任何效果。我如何查看git日志中的所有引用,除了某些与模式匹配的标签外?
作为替代方案,在Git 2.16(2018年第一季度)中,用于注释提交的标记名“ git log --decorate”现在可以限制为具有两个附加选项的可用引用的子集--decorate-refs[-exclude]=<pattern>。
参见RafaelAscensão(``)的commit 65516f5(2017年11月21日)。
帮助:Kevin Daudt(Ikke)和Junio C Hamano(gitster)。
(由Junio C gitsterHamano合并--在commit 6c3daa2中,2017年12月13日)
log:添加选项以选择要装饰的裁判当
log --decorate使用时,git会装饰与所有可用的裁判提交。虽然在大多数情况下这可能会产生所需的效果,但 在某些情况下可能会导致输出过于冗长。介绍两个命令行选项,
--decorate-refs=<pattern>和--decorate-refs-exclude=<pattern>
允许用户选择装饰中使用的参考。当
--decorate-refs=<pattern>给定“ ”时,只有与图案匹配的参考才用于装饰。--decorate-refs-exclude=<pattern>给出“ ” 时,与模式匹配的参考不会用于装饰。
在您的情况下:
git log -n6 --decorate=short --pretty="tformat:%f%d" \
--decorate-refs-exclude="tags/phabricator/*"
Run Code Online (Sandbox Code Playgroud)
这可能应该有效(并且最终可能有效):
git log --exclude='refs/tags/phabricator/*/*' --all
我认为问题是*/*;尝试一下--exclude='refs/tags/phabricator/*'。有很多地方*只能出现在名称的末尾,这就是其中之一。(获取参考规范过去也受到这样的限制,但最近该限制已被删除。)
请注意,--decorate仍然会添加refs/tags/phabricator/foo/bar到通过该提交包含的提交,该提交--all也恰好被标记(如果有任何此类标记)。也就是说,该步骤会阻止添加--exclude此类提交,但如果它们已包含在内,则不会对其进行修饰。