Различия между подмодулем git и поддеревом

каковы концептуальные различия между использованием подмодуля git и поддерева?

каковы типичные сценарии для каждого?

4 ответов


что делать, если я хочу, чтобы ссылки всегда указывали на главу внешнего РЕПО?

вы можете сделать подмодуль следовать за головкой ветви подмодуля удаленного РЕПО, с:

o git submodule add -b <branch> <repository> [<path>]. (чтобы указать ветку для следования)
o git submodule update --remote который обновит содержимое подмодуля до последней главы из <repository>/<branch> по умолчанию origin/master. Ваш основной проект по-прежнему будет отслеживать хэши главы подмодуля, даже если --remote хотя используется.


  • поддерева еще как

подмодуль link;

поддерево является копией


концептуальное различие:

с git submodules обычно вы хотите разделить большой репозиторий на более мелкие. Способ ссылки на подмодуль maven-style - вы ссылаетесь на одну фиксацию из другого репозитория (подмодуля). Если вам нужно изменить подмодуль, вы должны сделать фиксацию / push внутри подмодуля, затем ссылаться на новую фиксацию в главном репозитории, а затем фиксировать / push измененную ссылку главное хранилище. Таким образом, вы должны иметь доступ к репозиториям для полной сборки.

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


суб-модуль
нажатие основного РЕПО на пульт дистанционного управления не толкает файлы суб-модуля

суб-дерево
нажатие основного РЕПО на удаленный толкает файлы под-дерева