Подмодуль git foreach мастер происхождения git pull против git pull --recursive-submodules

Я управляю репозиторием с несколькими подмодулями. Некоторое время сейчас я использую

$ git submodule foreach git pull origin master

чтобы внести последние изменения для всех этих парней. Однако недавно я узнал о

$ git pull --recurse-submodules

и дал ему попробовать, но кажется, что изменения только извлекаются, так что вам нужно

$ git submodule update --recursive

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

  1. Я делаю что-то неправильно?
  2. Или это артефакт foreach как я раньше делал вещи?
  3. Как я могу исправить вещи так, чтобы pull --recurse-submodules а также submodule update --recursive работать как положено?

1 ответ

git submodule update --recursive обновляет субмодули в соответствии с коммитом в родительском репо. Поэтому вам нужно зафиксировать изменения в родительском репо, чтобы эта команда могла что-либо сделать.

С этой настройкой:

/proj/.git
/proj/module/.git

Вы вносите изменения в "модуль", фиксируете и нажимаете их. В "proj" вы фиксируете модуль (он просто показывает изменение хеша подмодуля).

Теперь, когда вы извлекаете и обновляете субмодуль, он обновляет "модуль" для использования нового коммита.

Другие вопросы по тегам