Различия между подмодулем git и поддеревом
каковы концептуальные различия между использованием подмодуля git и поддерева?
каковы типичные сценарии для каждого?
4 ответов
-
субмодуль лучше подходит для разработка на основе компонентов, где ваш главный проект зависит от фиксированной версии другого компонента (РЕПО).
Вы сохраняете только ссылки в Родительском РЕПО (gitlinks, специальные записи в индексе)
что делать, если я хочу, чтобы ссылки всегда указывали на главу внешнего РЕПО?
вы можете сделать подмодуль следовать за головкой ветви подмодуля удаленного РЕПО, с:
o git submodule add -b <branch> <repository> [<path>]
. (чтобы указать ветку для следования)
o git submodule update --remote
который обновит содержимое подмодуля до последней главы из <repository>/<branch>
по умолчанию origin/master
. Ваш основной проект по-прежнему будет отслеживать хэши главы подмодуля, даже если --remote
хотя используется.
- поддерева еще как
концептуальное различие:
с git submodules обычно вы хотите разделить большой репозиторий на более мелкие. Способ ссылки на подмодуль maven-style - вы ссылаетесь на одну фиксацию из другого репозитория (подмодуля). Если вам нужно изменить подмодуль, вы должны сделать фиксацию / push внутри подмодуля, затем ссылаться на новую фиксацию в главном репозитории, а затем фиксировать / push измененную ссылку главное хранилище. Таким образом, вы должны иметь доступ к репозиториям для полной сборки.
с поддерево git вы интегрируете другой репозиторий в свой, включая его историю. Поэтому после его интеграции размер вашего репозитория, вероятно, больше (так что это не стратегия сохранения репозиториев меньше). После интеграции нет подключения к другому репозиторию, и вам не нужен доступ к нему, если вы не хотите получить обновление. Итак, эта стратегия больше для повторного использования кода и истории - я лично не использую его.
суб-модуль
нажатие основного РЕПО на пульт дистанционного управления не толкает файлы суб-модуля
суб-дерево
нажатие основного РЕПО на удаленный толкает файлы под-дерева