35.4.7 里程碑名字过滤器

参数—tag-name-filter用于设置里程碑名字过滤器。该过滤器也是经常要用到的过滤器。上面介绍的各个过滤器都有可能改变提交ID,如果在原有的提交ID上建有里程碑,可能会随之更新,但是会产生大量的警告日志,提示要使用里程碑过滤器。里程碑过滤器脚本以原始里程碑名称作为标准输入,并把新里程碑名称作为标准输出。如果不打算变更里程碑的名称,而只是希望里程碑随提交而更新,可以在脚本中使用cat命令。例如,下面的命令中同时使用里程碑名字过滤器和目录树过滤器。


$git filter-branch—tree-filter'

[-f oldfile]&&mv oldfile newfile||true

'—tag-name-filter 'cat'——all


在前面的里程碑一章中曾经提到过git branch命令没有提供里程碑重命名的功能,而使用里程碑名字过滤器可以实现里程碑的重命名。下面的的示例会修改里程碑的名字,将前缀为"old-prefix"的里程碑改名为前缀为"new-prefix"的里程碑。


$git filter-branch—tag-name-filter'

oldtag="cat"

newtag=${oldtag#old-prefix}

if["$oldtag"!="$newtag"];then

newtag="new-prefix$newtag"

f

echo$newtag

'


注意签名里程碑重建后,因为签名不可能保持,所以新里程碑会丢弃签名,成为一个普通的包含说明的里程碑。