Как перенести один каталог из репозитория git в новый репозиторий при сохранении истории?
Я унаследовал репозиторий git, содержащий несколько проектов в отдельных каталогах. Я хотел бы разделить репозиторий на новые отдельные репозитории, по одному для каждого проекта, а затем иметь главный репозиторий, содержащий проекты в качестве подмодулей. Я хотел бы сделать все это, сохраняя при этом историю изменений отдельных проектов, если это возможно.
Я мог бы клонировать репозиторий для каждого проекта и каждый раз удалять все другие проекты, но есть ли лучший способ избежать клонированной истории в каждом новом репозитории проекта?
Ответы
Ответ 1
Вы можете использовать git filter-branch
, чтобы переписать историю проекта. Из документации:
Чтобы переписать репозиторий так, чтобы он выглядел как если foodir/был его корнем проекта, и отбросить всю историю:
git filter-branch --subdirectory-filter foodir -- --all
Сделайте несколько копий своего репо, сделайте это для каждого подкаталога, который вы хотите разделить, и вы должны завершить то, что ищете.
Ответ 2
Точка git заключается в том, что история воплощается в каждой фиксации путем хеширования родительского фиксации. Вы можете "переигрывать" коммиты (по существу, как работает svn-импортер) в новый репозиторий и поддерживать только каждый подпроект. Это, однако, уничтожило бы смысл хешей фиксации. Если у вас нет проблем с этим, пусть так и будет.
В прошлом я только что клонировал его и двигался дальше. Это делает вещи большими, но дисковое пространство дешево; мое время дорого.
Я также не знаю никаких инструментов для сращивания каталога. Я полагаю, вы могли бы git -log в каталоге найти все коммиты на нем, а затем переписать фиксации с чем-то вроде git -fast-export?
Ответ 3
Чтобы экспортировать папку в новый репозиторий, вам необходимо: