Людей страница git filter branch
говорит:Когда вам нужно `--tag-name-filter cat` для` git filter-branch`?
use "--tag-name-filter cat" to simply update the tags.
Позже он даже говорит:
use --tag-name-filter cat -- --all
Однако --all
должен включать --tags
, поэтому все теги должны надлежащим образом получить переписаны.
Небольшой тест проверяет это:
$ git init
$ mkdir dir
$ touch dir/file
$ git add .
$ git commit -am init
$ git ls-files
dir/file
$ git tag tag
$ git for-each-ref
3006eb0a031e40901122ac8984c85ad533982f8b commit refs/heads/master
3006eb0a031e40901122ac8984c85ad533982f8b commit refs/tags/tag
$ git filter-branch --subdirectory-filter dir -- --all
Rewrite 3006eb0a031e40901122ac8984c85ad533982f8b (1/1)
Ref 'refs/heads/master' was rewritten
Ref 'refs/tags/tag' was rewritten
$ git for-each-ref
8e5f09c93a2fbdb435dbe7019abeb841cb5857b2 commit refs/heads/master
3006eb0a031e40901122ac8984c85ad533982f8b commit refs/original/refs/heads/master
3006eb0a031e40901122ac8984c85ad533982f8b commit refs/original/refs/tags/tag
8e5f09c93a2fbdb435dbe7019abeb841cb5857b2 commit refs/tags/tag
Поэтому вопрос:
В какой ситуации мне нужен --tag-name-filter cat
?
Существует также Why has git-filter-branch not rewritten tags?, но я не вижу, как попасть в такую ситуацию.
В приведенном выше примере тег 'tag' не совпадает с тегом ref' refs/original/refs/tags/tag'? Даже без '--tag-name-filter' тег' tag' указывает на новый коммит после ветки фильтра. – michas