Пишу мультимодульный проект на С++. До этого вставлял исходный код модулей-зависимостей прямо в исходный код модуля, для которого описывались эти зависимости (копа-паста, лень было заморачиваться с гитовскими приколами для этого). Недавно понял, что такое не катит и нужно организовать всё по-человечески, через какой-нибудь предоставляемый гитом механизм.
Почитал про submodules, но потом наткнулся на
эту статью и на
эту статью. Там говорилось что есть такая штука - subtree - которая намного круче чем submodules. Почитал, и возникло подозрение, что не совсем корректно сравнивать эти механизмы, у них просто разные области применения.
Собственно, вопрос - действительно ли subtree универсальная замена submodule, которая лучше его для любых задач, либо же есть случаи, когда submodule лучше.
Путанные соображения по поводуДисклеймер: Я пока не очень хорошо разбираюсь в git - буквально второй день - поэтому тут может быть бред.
Среди главных преимуществ subtree по отношению к submodule указывается, в частности, отсутствие необходимости выполнять специальный апдейт новых версий зависимости (апдейт во время исполнения команды pull для внешнего репозитория).
Исходя из этого, как я понимаю, механизм submodule был рассчитан на использование в проектах, для которых переход на новую версию зависимости означает серьёзные изменения в самом проекте (например, новая версия меняет программный интерфейс, что может привести к поломке компилирования кода проекта). В контексте изоляция зависимости от pull-а внешнего проекта для submodule это не баг, а фич - фича, позволяющая более строго контролировать версии зависимостей на машинах всех коммитеров проекта. Другой вопрос, конечно, почему нельзя при каждом пуле внешнего проекта автоматически смотреть не пришло ли обновление версии зависимости в рамках заданной в .gitsubmodule - но это отдельная тема.
Механизм subtree же используется для таких зависимостей, у которых каждый коммит не вносит серьёзных изменений в работу внешнего проекта, либо для внешнего проекта в приоритете стоит необходимость гонки за последними фичами зависимостей.
updated:
Продолжение обсуждения