Фильтр подкаталогов Git с тегами

Я пытаюсь разделить большое репо на несколько более мелких. Цель состоит в том, чтобы разделить папку и сохранить теги в процессе.

Я пытался:

git filter-branch --prune-empty --subdirectory-filter my-folder develop

Это правильно место my-folderв корне нового проекта и сохранили теги. Однако проверка тега привела к просмотру всей старой структуры каталогов в новом репо.

Итак, я попробовал:

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter my-folder -- --branches=develop --tags

Это приводит к тому, что ветвь разработки находится там со старой структурой каталогов, НО, когда я проверяю тег, я вижу, что подкаталог правильно отфильтрован до корня! Итак, теги правильные, но не ветка разработки. В основном это проблема, противоположная первому методу.

Я не понимаю, почему второй метод не сработал. Буду очень признателен за любые указатели!

РЕДАКТИРОВАТЬ:

Попробуйте это сейчас:

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter my-folder -- --all

Колебался, так как ожидал, что это займет немного больше времени. Это заняло больше времени, но в основном работало. Что не сработало? Что ж, более старые теги, в которых папка еще не была создана, были оставлены в репо и при извлечении содержали полную (очень) старую структуру каталогов. Мне пришлось удалить все эти теги с помощью grep. Тем не менее, репо не такое маленькое, как я ожидал...

1 ответ

Решение

Как я уже упоминал в разделе " Команды Git, которые могут сломать / переписать историю ", старая команда git filter-branch постепенно устаревает.

Используя новый git filter-repo, это было бы:

 git filter-repo --path my-folder/ --to-subdirectory-filter / -- refs develop

Затем переместите эту ветку в новый пустой репозиторий Git.

Это должно правильно переместить соответствующие теги.

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