Подтвердить что ты не робот

Как перенести один каталог из репозитория git в новый репозиторий при сохранении истории?

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

Я мог бы клонировать репозиторий для каждого проекта и каждый раз удалять все другие проекты, но есть ли лучший способ избежать клонированной истории в каждом новом репозитории проекта?

4b9b3361

Ответ 1

Вы можете использовать git filter-branch, чтобы переписать историю проекта. Из документации:

Чтобы переписать репозиторий так, чтобы он выглядел как если foodir/был его корнем проекта, и отбросить всю историю:

git filter-branch --subdirectory-filter foodir -- --all

Сделайте несколько копий своего репо, сделайте это для каждого подкаталога, который вы хотите разделить, и вы должны завершить то, что ищете.

Ответ 2

Точка git заключается в том, что история воплощается в каждой фиксации путем хеширования родительского фиксации. Вы можете "переигрывать" коммиты (по существу, как работает svn-импортер) в новый репозиторий и поддерживать только каждый подпроект. Это, однако, уничтожило бы смысл хешей фиксации. Если у вас нет проблем с этим, пусть так и будет.

В прошлом я только что клонировал его и двигался дальше. Это делает вещи большими, но дисковое пространство дешево; мое время дорого.

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

Ответ 3

Чтобы экспортировать папку в новый репозиторий, вам необходимо:

  • Чтобы клонировать репозиторий, где находится папка, которую вы хотите экспортировать.
  • Чтобы создать пустой репозиторий вашего хостинг-провайдера в качестве GitHub для хранения экспортированной папки.
  • Откройте папку клонированного репозитория и запустите эту команду:

    git subtree push --prefix=YourFolderNameToExport https://github.com/YourUserName/YourNewCleanRepoName master