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

StackOverflow https://stackoverflow.com/questions/1593620

  •  22-09-2019
  •  | 
  •  

Вопрос

У меня есть репозиторий git, который содержит две папки: binary-search и poker.Например, http://github.com/soulnafein/code-katas

Я хотел бы превратить эти папки в подмодули и сохранить историю их изменений.

Как мне это сделать?

Это было полезно?

Решение

Общая идея состоит в том, чтобы использовать 'git-ветвь фильтра' и следующие шаги:

1) Создайте подмодуль, используя --subdirectory-filter filter-branch (после клонирования вашего репо).

$ git filter-branch --subdirectory-filter ABC HEAD -- --all

Видеть это ТАК вопрос подробнее об этом шаге.

2) Создайте суперпроект, используя индексный фильтр filter-branch удалить подмодуль.

$ git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch ABC" --prune-empty HEAD

3) Прикрепите подмодуль к последней версии суперпроекта.

Видеть Отключить подкаталог в отдельный репозиторий git. для практического примера.

Каждый субмодуль сохранит свою историю.
Но как сказано в этом предложение патча, это будет:

потерять все исторические связи между суперпроектом и подмодулем, сломав такие инструменты, как 'git bisect', что затрудняет восстановление старых выпусков.

В идеале каждая версия вновь созданного суперпроекта должна быть связана с правильной версией подмодуля (и все записи .gitmodules также будут настроены правильно на протяжении всей истории проекта).

Если вам не нужно связывать предыдущую историю с новыми подмодулями, вы можете выполнить шаги, упомянутые выше.
Но если вам действительно нужно перейти от более старой точки, имея ссылки на ваши подмодули (которые в настоящее время являются простыми подкаталогами), вы можете попробовать сценарий, упомянутый в патче, о котором я говорю.Это обсуждается в эта тема, но еще интегрирован в Git, как говорит Джунио С. Хамано:

К сожалению, я не думаю, что мы полностью разработали (и вообще не реализовали) поведение для проверки различных точек истории, в которых один и тот же подмодуль перемещался по дереву суперпроекта.

Другие советы

Сегодня есть лучший способ сделать это: git subtree

Видеть этот ответ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top