使用gitk时只显示某些标签?

时间:2014-01-11 02:19:59

标签: linux git gitk

我们的存储库中的每个提交都有一个与之关联的标记。分支上有很多标签,名称中包含“B7”。我可以运行gitk并排除所有这些“B7”代码吗?相反,如何运行gitk并仅显示执行中包含“B7”的提交?

我已经厌倦了gitk --all并且得到了一堆额外的毛病。

1 个答案:

答案 0 :(得分:3)

在我写这篇文章的过程中,我想到你可能希望显示提交,但只是希望其中一些提交不显示指向它们的标记。这回答了一个问题:“我如何看到所有提交可以从某些或所有分支到达,但不能从某些不能从这些分支到达的某些标记到达提交?”。


gitk采用与git-rev-list相同的选项,用于选择要显示的提交。因此,您可以提供--all和/或--branches,而不是--tags,而这两者都接受“模式”参数。

不幸的是,模式参数是shell glob样式模式,其中很容易包含那些包含B7*B7*将执行此操作)的模式,但很难排除那些包含{B7的模式。 1}}嵌入在其中的任意位置。如果B7位于名称的开头 end ,那就不那么困难,但仍然有点混乱:例如,--tags="[AC-Za-z]*" --tags="B[A-Za-z0-689]*"是可能足以匹配不以B7开头的两个或多个字符标记(添加--tags="?"以包含单字符标记)。

(这里的双引号是为了防止shell尝试扩展shell样式的glob,尽管在大多数shell变体中,只要[当前目录]中没有名称以{{1}开头的文件你可以在没有它们的情况下逃脱。)

为了获得完全的灵活性,您可以使用--tags=git for-each-ref枚举引用,通过git show-ref之类的方式管道引用名称以包含或排除任意正则表达式,并将结果作为结果传递给grep -v的参数。例如,要查看所有分支上的所有提交,以及

上的提交
gitk

(没有经过实际测试,但很简单,应该可以正常工作,假设有gitk --branches $(git for-each-ref --format='%(refname:short)' refs/tags/ | grep -v B7) sh个shell。)

(对于bashcsh,将所有内容放在一行,或者在换行前使用反斜杠;并将tcsh替换为cmd ... $(subcmd ...)。反引用版本通常在语法上较差因为它不能嵌套,但在这种情况下它会做。即使我使用tcsh作为交互式shell,我切换到sh进行脚本编写。)