Каковы недостатки для установки параметра конфигурации git submodule.recurse в значение true? - PullRequest
0 голосов
/ 28 ноября 2018

Этот вопрос Есть ли способ заставить git pull автоматически обновлять подмодули? имеет принятый ответ по настройке git примерно так:

git config --global submodule.recurse true

Как один из комментариев к этому ответуМне интересно, почему это не стандартное поведение git;точнее, каковы недостатки установки этого параметра конфигурации?

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Вот в чем дело: люди будут склонны принимать значения по умолчанию, если их рабочий процесс не будет работать правильно, а сложность Git imho полностью из-за разнообразия рабочих процессов, которые он поддерживает.

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

Таким образом, вызов значений по умолчанию, которые соответствуют или не соответствуют рабочему процессу, который вы используете, является "недостатком", как мне кажется, чтобы пропустить лес за деревьями.Независимо от того, как установлены заводские настройки по умолчанию, они, вероятно, будут неоптимальными для вашего рабочего процесса, по крайней мере, в некоторых ваших репозиториях именно из-за огромного разнообразия рабочих процессов, которые обслуживает Git.Сделайте настройки по умолчанию подходящими для вас, кто-то еще появится, чтобы спросить, почему они по умолчанию извлекают все рекурсивно.

Единственное, что я могу однозначно назвать недостатком настройки автоповторения по умолчанию, это:учитывая, что никто не может догадаться, будет ли этот параметр соответствовать рабочему процессу в каком-либо конкретном репо, а заводское значение по умолчанию должно быть предположением, хуже угадать более дорогой вариант.

Легко включить авторекурсКонфигурирование для всей вашей работы, но если вам не нужно делать даже этого, вы можете потратить очень много времени на клонирование, вы даже не подозревали, что вам это вообще не нужно.Локальные интерфейсы или справочные хранилища для крупных общих историй поставщиков просты.

0 голосов
/ 11 декабря 2018

При клонировании или извлечении репозитория, содержащего субмодули, субмодули не будут извлечены по умолчанию;Вы можете поручить клону переходить в подмодули.Подкоманды init и update подмодуля git будут поддерживать подмодули извлеченными и с соответствующей версией в вашем рабочем дереве.В качестве альтернативы вы можете установить submodule.recurse, чтобы оформлять возврат в подмодули.

Источник: git-scm.com

Недостатком этой опции является клонирование иливыгрузка репозитория, содержащего несколько подмодулей, - это издержки производительности.

0 голосов
/ 05 декабря 2018

Эта опция была введена в commit 046b482 , первоначально для рабочих команд управления деревом (read-tree / checkout / reset)

git grep / fetch /pull / push вскоре последовало.
Однако, как в документации упоминается , в отличие от других приведенных ниже команд, клон все еще нуждается в собственном флаге рекурсии: git clone --recurse-submodules <URL> <directory>.
См. недавнее обсуждение :

Это было дизайнерское решение после его введения, поскольку git clone может быть слишком большим.
Возможно, нам нужно вернуться к нему.это решение и просто клонировать подмодули, если установлен submodule.recurse.

Поскольку число / размер задействованных подмодулей может быть потенциально большим, поведение по умолчанию на данный момент не предусматривает их рекурсивное включениепо умолчанию.

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

Тем не менее, одно преимущество заключается в том, чтобы не видеть «неотслеживаемые файлы» при переключении ветвей, , как видно из этого обсуждения .

...