Фильтр подкаталога Git с тегами - PullRequest
2 голосов
/ 15 октября 2019

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

Я попытался:

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 Ответ

1 голос
/ 19 октября 2019

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

Использование новой git filter-repo, это будет:

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

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

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

...