Объедините два репозитория git с историей в подкаталоги и сделайте вид, что файлы всегда есть - PullRequest
0 голосов
/ 28 февраля 2019

Мне нужно объединить два репозитория git в один новый репозиторий без потери истории и сохранить ветки и теги возможностей.

Это кажется довольно распространенным вопросом, который уже был решен много раз (например, https://github.com/unravelin/tomono или Объединение двух репозиториев Git без прерывания истории файлов ).

Но ни одно из решений не удалось решить, так как я могу вернуться назад во времени и просмотреть все файлы изуказанный коммит, в котором присутствуют оба подкаталога.

Так что мне интересно, возможно ли что-то подобное с git.

Это моя текущая настройка: два репозитория, которые были отдельно разработаны:

  • apprepo
  • librepo

Они оба клонируются и объединяются в rpm нашей системой сборки (включая некоторые конфигурации и каталоги данных)

  • / app / -> из apprepo
  • / lib / -> из librepo
  • / data /
  • / config /

Теперь я хочу перенести оба репозитория.в одно «монорепо», где я также мог бы хранить конфигурацию и другие основные необходимые подкаталоги.

Если я использую одно из множества решений «слить х репо в одно репо», я получу однодвух состояний при просмотре дерева каталогов этого коммита:

  • Файлы, не перемещенные в истории - фиксация в apprepo: только файлы, которые были в apprepo, видны и отображаются в корневом каталоге,Фиксация в librepo: только файлы, которые были в apprepo, видны и отображаются в корневом каталоге
  • Файлы, перемещенные в истории - Commit в apprepo: видны только приложения subdir со всеми файлами, которые были в apprepo,При фиксации в librepo показывается только subdir lib со всеми файлами, которые были в librepo.

Это также делает теги практически бесполезными.Я хотел бы, чтобы приложение и библиотека были видны при любом коммите.

Давным-давно, при переходе с SVN на git, я справился с чем-то подобным, прочитав обе истории и "воспроизведя" коммиты, как если бы подкаталоги всегда были там.для этой конкретной проблемы, или я действительно должен жить с потерянными признаками и "неполной" историей?

1 Ответ

0 голосов
/ 01 марта 2019

TLDR;После еще одного полного дня, проведенного на эту тему, я согласился с решением с наименьшими недостатками.Комбинация стратегии subtree-merge из https://stackoverflow.com/a/14470212/11126816 и git filter-branch from https://stackoverflow.com/a/43340503/11126816

Может быть, другие инструменты помогут другим:

  • https://metacpan.org/pod/git-stitch-repo: У него были большие надежды на то, что это сработает, но наши репозитории казались слишком сложными для алгоритма обработки ветвей / слияний.Я закончил со слишком большим количеством пропущенных коммитов.Может быть, с более линейными репозиториями это может сработать
  • https://github.com/shopsys/monorepo-tools: также приятный маленький помощник и, кажется, лучше поддерживаемый.
...