Почему git-filter-branch не переписывает теги?

Мне нужно было разделить мой репозиторий на две части. Я использовал шаги, показанные здесь: Отсоединить (переместить) подкаталог в отдельный Git-репозиторий

Команда, которую я использовал, была:

 git filter-branch --subdirectory-filter ABC HEAD -- --all

который, казалось, работал нормально и оставил меня с ABC в качестве корня.

Однако теперь, если я попытаюсь извлечь тег, который существовал до того, как разделить репо:

 git checkout an-old-tagname

он воссоздает старую структуру каталогов, поэтому воссоздает ABC как подкаталог вместе с XYZ1 и XYZ2.

Я знаю, что именно так репозиторий действительно выглядел в тот момент - но я хочу, чтобы тег ссылался только на биты ABC, как если бы они были в корне тогда. Я думал, что это то, что делает фильтр-ветвь, когда переписывает историю, но, очевидно, я не обращаю на это должного внимания.

Как я могу переписать теги, чтобы я мог вернуться назад во времени, оставаясь при этом в качестве корня репозитория ABC?

1 ответ

Решение

Вам необходимо указать

--tag-name-filter cat

переписать теги

Теперь вы можете сделать

git filter-branch --tag-name-filter cat ... другие параметры фильтра... -- --tags

где ... другие параметры фильтра... повторяет фильтры, которые вы применяли ранее.

Другие вопросы по тегам