2017-02-08 1 views
1

Так что я могу клонировать ветку и получить все подмодулях с:git CLI Как я могу выполнить проверку, которая также обновляет все подмодули?

git clone <url> -b myBranch --recursive 

Это здорово :) Но я хочу, чтобы перейти на другую ветку, так что я:

git checkout myBranch2 

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

c:\dev> git checkout myBranch2 
M  SubModule1 
M  SubModule2 
Branch myBranch2 set up to track remote branch myBranch2 from origin. 
Switched to a new branch 'myBranch2' 

Затем я проверил версию SubModule1 и он все еще указывает на версия, которая была оригинально проверена (последняя), а не версия, на которую она должна указывать (около 3 проверок старше), которая была связана с веткой myBranch2.

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

+0

См., Если это поможет, http://stackoverflow.com/questions/1030169/easy-way-pull-latest-of-all-submodules – zillani

+1

После 'git checkout' делать' git обновление подмодуля --checkout --recursive ' – Leon

+0

@zillani Этот вопрос почти отвечает на мой вопрос. Я не пытаюсь сделать какие-либо изменения как таковые, но я мог бы предположить, как это сделать из этого вопроса ... спасибо –

ответ

1

После git checkout запуска

git submodule update --checkout --recursive 

Из git submodule документации:

git submodule update ...

Update зарегистрированных Подмодули, чтобы соответствовать то, что суперпроекте ожидает клонирования недостающих подмодулей и обновления рабочего дерево подмодули. «Обновление» может быть выполнено несколькими способами в зависимости от от параметров командной строки и значения submodule.<name>.update конфигурационная переменная. Поддерживаемые процедуры обновления являются:

  • контроля - коммят записанной в суперпроект будет проверено в субмодуле на отделенную HEAD. Это делается, когда задана опция --checkout, или нет опции, и submodule.<name>.update не установлен, или если он установлен на checkout.

  • ...

--recursive

Эта опция действительна только для foreach, update, status и sync команд. Трассировать подмодули рекурсивно. Операция выполняется не только в подмодулях текущего репо, но и в любых вложенных подмодулях внутри этих подмодулей (и т. Д.).

Вы также можете установить post-checkout hook, чтобы обновление подмодулей выполнялось автоматически.

+0

Большое спасибо. Идея крючка после проверки - это потрясающе, я бы снова повторил, если бы мог, для этой части. :) –

Смежные вопросы