Как объединить два отдельных несвязанных репозитория 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 с единой временной шкалой истории. Получается, что изначально я начал проект в репозитории 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)

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

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

13
задан Community 23 May 2017 в 10:30
поделиться