Как выделить имеющуюся часть репозитория GIT в подмодуль?

Как к имеющемуся репозиторию подключить внешний репо в качестве подмодуля более или менее понятно:
$ git submodule add git@github.com:schacon/rack.git rack

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

Например весь проект находится под системой контроля версий, включая раздел /sport/soccer/
Как уже этот имеющийся раздел сделать репозиторием (подмодулем)?
git submodule add git@github.com:schacon/rack.git sport/soccer не сработает (выдаст ошибку, мотивируя тем, что этот раздел и так в системе контроля версий).

Не хочется удалять раздел, коммитить без него и подключать внешний репо с целью восстановления раздела.
  • Вопрос задан
  • 2882 просмотра
Решения вопроса 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Не хочется удалять раздел, коммитить без него и подключать внешний репо с целью восстановления раздела.

И тем не менее это единственный способ
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@ilyarsoftware
Как написал @DmitriyEntelis "удалять раздел, коммитить без него и подключать внешний репо с целью восстановления раздела." это единственный способ, но если хотим сохранить историю выделяемой части проекта можно поступить следующим образом:

git clone <git repository A url>
cd <git repository A directory>
git remote rm origin
git filter-branch --subdirectory-filter <directory 1> -- --all
mkdir <directory 1>
mv * <directory 1>
git add .
git commit


Источник: Moving Files from one Git Repository to Another, P...
Ответ написан
Комментировать
@vl12
Ещё вариант:
Выделить директорию в ветку через `git subtree split`, загрузить в неё историю, отключить слежение из старого репозитория. Подробнее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы