Как объединить два отдельных несвязанных репозитория Git в один с одной временной шкалой истории

У меня есть два несвязанных (не разделяющих каких-либо предков) в репозиториях Git, один - суперрепозиторий, который состоит из нескольких меньших проектов (Позволяет называть его репозиторием A). Другой - это временный локальный репозиторий Git для меньшего проекта (позволяет вызывать его репозиторий B). Графически это будет выглядеть как

A0-B0-C0-D0-E0-F0-G0-HEAD (repo A)
A0-B0-C0-D0-E0-F0-G0-HEAD (remote/master bare repo pulled & pushed from repo A)
A1-B1-C1-D1-E1-HEAD (repo B)

В идеале, мне бы очень хотелось объединить репо B в репо A с одной исторической шкалой. Таким образом, казалось бы, что я первоначально начал проект в репо А. Графически это был бы идеальный конечный результат

A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (new repo A)
A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H(from repo B)-HEAD (remote/master bare repo pulled & pushed from repo A)

Я делал некоторое чтение с подмодулями и поддеревом (Pro Git - довольно хорошая книга, кстати), но оба они, похоже, решают проблему сохранения двух отдельных ветвей с дополнительным модулем, способным вытащить изменения из вверх по течению и поддереву немного меньше головной боли. Оба решения требуют дополнительных и специализированных команд Git для обработки проверок и синхронизации между веткой master и sub tree/module. Оба решения также приводят к нескольким временным графикам (с поддеревом вы даже получаете 3 отдельных временных графика при использовании --squash).

Ближайшее решение из SO, похоже, говорит о трансплантате", но так ли это? Цель состоит в том, чтобы иметь единственный унифицированный репозиторий, в котором я могу вытащить/нажать check-ins, так что больше нет репо B, а просто репо A в конце.

Ответ 1

Я думаю, вы делаете это так:

  • git удаленное добавление [репо b]
  • git fetch//получить репо b в repo a
  • из-за того, что вы хотите сохранить историю следующим образом: A0-A1-B1-B0-D1-C0-D0-E0-F0-G0-E1-H (из репо B) -HEAD (новое репо A) вы можете сначала выбрать A0 в качестве начальной точки, после этого используйте git вишневый выбор по одному.

Надеюсь, это полезно для вас.

Br, Тим