1

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

我厌倦了做gitk --all一堆额外的绒毛。

4

1 回答 1

4

写到一半时,我突然想到,也许您希望显示提交,但只是希望其中一些提交不显示指向它们的标签。这反而回答了“我如何查看可从某些或所有分支访问的所有提交,但看不到可从这些分支也无法访问的某些标签访问的提交?”的问题。


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

不幸的是,模式参数是 shell glob 样式模式,其中很容易包含那些包含B7(*B7*会成功) 但很难排除那些包含B7嵌入在其中任意位置的东西的东西。如果 位于名称B7开头结尾,则难度会降低,尽管仍然有点混乱:--tags="[AC-Za-z]*" --tags="B[A-Za-z0-689]*"例如,它可能足以匹配两个或多个不以开头的字符标签B7(添加--tags="?"以包含一个字符标签)。

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

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

gitk --branches $(git for-each-ref --format='%(refname:short)' refs/tags/ |
    grep -v B7)

(没有实际测试过,但很简单,应该可以工作,假设shbash外壳)。

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

于 2014-01-11T10:04:57.080 回答