Каковы концептуальные различия между использованием подмодуля git и поддерева?
Каковы типичные сценарии для каждого?
Каковы концептуальные различия между использованием подмодуля git и поддерева?
Каковы типичные сценарии для каждого?
Ответы:
Что если я хочу, чтобы ссылки всегда указывали на ГОЛОВКУ внешнего репо?
Вы можете сделать субмодуль, чтобы следовать заголовку ветви субмодуля удаленного репо, с помощью:
о git submodule add -b <branch> <repository> [<path>]. (указать ветвь, которой нужно следовать)
o, git submodule update --remoteкоторая <repository>/<branch>по умолчанию обновит содержимое подмодуля до последней HEAD from origin/master. Ваш основной проект все равно будет отслеживать хэши HEAD подмодуля, даже если --remoteон используется.
add -bи --remoteпосле них в командах обновления, как указано в документации по обновлению подмодуля . В таком случае, -bдействительно ли все еще требуется следовать за HEAD мастера?
-bиспользуется для генерации правильных метаданных .gitmodule для подмодуля (это эквивалентно a git config -f .gitmodules submodule.<path>.branch <branch>).
--remote- --remoteработает также, если -bне использовался add. В обоих случаях обновление вызовет фиксацию в родительском репо с субмодулем, поэтому ссылки не всегда "всегда указывают на ГОЛОВУ" очень автоматическим способом ... либо я не получил его, либо это утверждение лучше убрать из оригинального ответа (?)
Концептуальная разница заключается в следующем:
С подмодулями git вы обычно хотите разделить большой репозиторий на более мелкие. Способ ссылки на подмодуль - maven-style - вы ссылаетесь на один коммит из другого (подмодуля) репозитория. Если вам нужно изменить внутри подмодуля, вы должны сделать коммит / push внутри подмодуля, затем сослаться на новый коммит в главном репозитории, а затем зафиксировать / протолкнуть измененную ссылку основного репозитория. Таким образом, вы должны иметь доступ к обоим репозиториям для полной сборки.
С git subtree вы интегрируете другой репозиторий в свой, включая его историю. Таким образом, после его интеграции размер вашего репозитория, вероятно, будет больше (поэтому не стоит уменьшать размер репозитория). После интеграции нет соединения с другим хранилищем, и вам не нужен доступ к нему, если вы не хотите получать обновление. Так что эта стратегия больше для повторного использования кода и истории - я лично не использую ее.
git subtreeвами все еще можно подтолкнуть - если вы хотели - правильно?
субмодуль,
отправляющий основной репозиторий на удаленный компьютер, не передает файлы субмодуля
поддерево,
выдвигающее основной репо на удаленный сайт, подталкивает файлы поддерева
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags production refs/heads/master:refs/heads/master