Как я могу разделить репозиторий на более мелкие атомарные репозитории? - PullRequest
2 голосов
/ 24 февраля 2011

Я прочитал " Отсоединить подкаталог в отдельный репозиторий Git ", но я не совсем уверен, как использовать это для достижения того, что я ищу. В настоящее время у нас есть один большой проект, который содержит нашу схему / сущности, наши интерфейсные веб-процессы и 2 версии нашего REST API. Я хотел бы разделить все это на отдельные репозитории, если это возможно. Вот какая структура каталогов у нас есть на данный момент:

lib/Project/Entity/*.pm
lib/Projcet/Data/*.pm
lib/Project/Server/Controller/*.pm
lib/Project/Server/Controller/WS/1/*.pm
lib/Project/Server/Controller/WS/2/*.pm
lib/Project/Server/Form/*.pm

И так далее. Я хотел бы иметь возможность взять каталоги Entity и Data и переместить их в новый репозиторий, а также предпочтительно переместить их:

lib/Project/Schema/Entity/*.pm
lib/Project/Schema/Data/*.pm

С остальными файлами я хотел бы разделить их на 2 дополнительных репозитория, один для нашего сервера переднего плана и один для REST API. Я полагаю, что хотя REST API имеет 2 разные версии, мы можем разделить его на 2 отдельные ветви (ветви v1 и v2).

Я чувствую, что filter-branch это почти то, что я хочу (возможно, с дополнительными коммитами сверху для перемещения файлов), но я не совсем понимаю, как это сделать. У кого-нибудь есть совет?

Я должен добавить, что, возможно, git rm --ignore-unmatch может быть тем, что я хочу, но файловая структура в HEAD на данный момент, скорее всего, не та, которая была в старых коммитах (этот репозиторий охватывает почти десятилетие истории). Что я действительно хочу, так это "принять коммиты, которые касаются этих файлов: foo, но игнорируют все другие коммиты. Вроде как СОЮЗ из git log:)

1 Ответ

2 голосов
/ 24 февраля 2011

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

Для материала в подкаталоге обратите внимание на эту часть руководства, которая описывает, как это сделать хорошо:

   To rewrite the repository to look as if foodir/ had been its project
   root, and discard all other history:

       git filter-branch --subdirectory-filter foodir -- --all
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...