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