Есть ли способ установить подмодуль git, чтобы он не имел отсоединенной головы при извлечении? - PullRequest
0 голосов
/ 23 октября 2018

Мы начинаем использовать подмодули git, и я пытаюсь предоставить некоторый хром для моих разработчиков.

Я знаю, что git хранит SHA подмодуля, поэтому он принимает коммит, так что это означает, что еслиРазработчик хочет обновить зависимость от субмодуля, он делает это путем набора и получения последней версии, а затем фиксирует изменение во внешнем каталоге.

Но проблема в том, что по умолчанию подмодули git имеют отсоединенные головки.Есть ли способ настроить подмодуль git в репо, чтобы всегда отслеживать определенную удаленную ветку?И команды для изменения этой удаленной ветви отслеживания?

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

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

1 Ответ

0 голосов
/ 24 октября 2018

При дальнейшем тестировании я обнаружил, что проблема в том, что git требователен к порядку параметров, и это очень сбивает с толку.

Чтобы добавить подмодуль, который должен следоватьветвь, вы должны использовать

git submodule add --branch $branchName $remoteURI $modulePath

Важная вещь выше - то, что --branch не может быть в конце .Я понятия не имею, почему.

Это создает файл .gitmodules, который включает

branch = $branchName

, на который указывают многие другие ответы.Но они не дают понять, что это отдельно от обычного процесса отслеживания веток git.Когда вы опускаете субмодуль, он не будет подключен к ветке, если вы вставите компакт-диск в папку субмодуля, поэтому он выглядит , как то, что branch = dev не удалось, и ничего не стоит.

Однакофактический рабочий процесс заключается в том, что в git есть совершенно другой механизм обновления подмодулей до последних по их веткам, если вы используете branch = $branchName.Очень запутанно.

Вместо того, чтобы идти

cd $modulePath
git pull

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

git submodule update --remote

(это может быть отфильтровано к определенному подмодулю, если хотите).

И после того, как вы это сделаете, ваш подмодуль будет находиться в ГОЛОВКЕ этой ветви , но , если вы перейдете в$ modulePath, он по-прежнему будет говорить только хеш коммита вместо имени ветви, потому что он манипулирует этим извне, используя систему подмодулей вместо обычного рабочего процесса отслеживания git.

...