Сегмент git проекта в подмодули

У меня есть проект git, который в настоящее время развивается, и несколько частей начинают становиться проектами сами по себе.

Итак, я хочу создать для них подмодули, но сохранить историю файлов. Были перемещения между различными папками (например, из partThatIsNotItsOwnProject в partThatIsItsOwnProject и я хотел бы иметь историю для этого шага тоже.)

До:

/.git
/someFiles
/partThatIsItsOwnProject
--/subdirectory
/partThatIsNotItsOwnProject
--/subdirectory

Я хотел бы иметь:

/.git
/someFiles
/partThatIsItsOwnProject
--/.git
--/subdirectory
/partThatIsNotItsOwnProject
--/subdirectory

Итак, я догадался git subtree будет делать это, но он, похоже, сохраняет исходный репозиторий git и отображает только его часть. git submodule кажется, цель этой настройки, но как мне сделать переход?

2 ответа

Для этого вам нужно переписать историю всего хранилища, чтобы исключить все, что не связано с каталогом, который вы хотите поместить в отдельное хранилище. git filter-branch Команда полезна для этого. Вы можете найти пример скрипта, который делает это в [0]. Обратите внимание, что вам может потребоваться настроить его в соответствии с вашими потребностями.

В общем, git filter-branch [1] позволяет вам переписывать историю мерзавцев, применяя ваши фильтры к каждому коммиту в репо последовательно. Обратите внимание, что хотя с использованием --tree-filter Это самый простой способ достичь того, что вам нужно, он очень медленный, так как он выполняет правильную проверку каждого коммита на этом пути, поэтому редактирование индекса напрямую --index-filter лучше.

[0] https://github.com/openstack/oslo.tools/blob/master/filter_git_history.sh

[1] https://git-scm.com/docs/git-filter-branch

Создайте основной git, затем переименуйте разветвленный в partThatIsItsOwnProject, а затем удалите все, что не является частью этого "subdir". Затем добавьте раздвоенный git в качестве подмодуля в основной git, вся история будет сохранена.

Повторите эти действия для всех подкаталогов, которые вы хотели бы выделить из мастер-мерзавца.

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