Обновление подмодулей
Одна из распространенных задач при работе с подмодулями — это поддержание их в актуальном состоянии с их удаленными репозиториями. Давайте узнаем, как обновить наш подмодуль.
Инициализация и обновление подмодулей
Если вы только что клонировали репозиторий, который содержит подмодули, вам нужно будет инициализировать и обновить их. Для нашего существующего репозитория мы можем продемонстрировать этот процесс с помощью:
cd ~/project/main-repo
git submodule init
git submodule update
Команда init инициализирует конфигурацию ваших подмодулей, а команда update извлекает данные и фиксирует коммит, указанный в вашем основном репозитории.
Вы также можете объединить эти команды:
git submodule update --init
Обновление подмодулей до последней удаленной версии
Если вы хотите обновить подмодуль до последнего коммита в его удаленном репозитории, вы можете использовать:
cd ~/project/main-repo
git submodule update --remote libs/libgit2-backends
Эта команда извлекает последние изменения из удаленного репозитория и обновляет подмодуль. Вы должны увидеть вывод, указывающий, что Git извлекает изменения.
После выполнения этой команды давайте проверим статус подмодуля:
git submodule status
Вы заметите, что вывод теперь показывает знак плюс (+) в начале, указывающий на то, что зафиксированный коммит подмодуля отличается от того, что записано в основном репозитории:
+abcdef1234567890abcdef1234567890abcdef12 libs/libgit2-backends (origin/HEAD)
Чтобы подтвердить изменения в вашем основном репозитории, выполните:
git status
Вы должны увидеть вывод, указывающий на то, что подмодуль был изменен:
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: libs/libgit2-backends (new commits)
Фиксация обновленной ссылки на подмодуль
Чтобы записать обновленное состояние подмодуля в вашем основном репозитории, вам нужно добавить и зафиксировать изменения:
git add libs/libgit2-backends
git commit -m "Update libgit2-backends submodule to latest version"
Вывод должен указывать, что вы успешно зафиксировали новую ссылку на подмодуль.
Проверка обновленного статуса
После фиксации обновленной ссылки на подмодуль давайте снова проверим статус:
git submodule status
Вывод больше не должен иметь знака плюс в начале, указывая на то, что подмодуль теперь синхронизирован с тем, что записано в основном репозитории:
abcdef1234567890abcdef1234567890abcdef12 libs/libgit2-backends (origin/HEAD)
Понимание опций обновления подмодуля
Команда git submodule update имеет несколько опций, которые управляют тем, как выполняются обновления:
--remote: Обновить до последнего коммита в удаленной ветке отслеживания
--merge: Слить изменения, если текущая ветка отстает от удаленной
--rebase: Перебазировать изменения, если текущая ветка отстает от удаленной
--recursive: Обновить также вложенные подмодули
Для большинства базовых случаев использования достаточно git submodule update --remote.