Menu
Coddy logo textTech

Git Submodule

Последнее обновление

Подмодуль встраивает один репозиторий Git в другой, закреплённый на конкретном коммите. Родительский репозиторий записывает, от какого коммита подмодуля он зависит, так что все получают одну и ту же версию. Так вы подключаете общую библиотеку или компонент, который живёт в собственном репозитории, не копируя его код.

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

git submodule встраивает другой репозиторий внутрь вашего, закрепив его на одном конкретном коммите.

Синтаксис

CommandWhat it does
git submodule add <url> libs/xДобавить репозиторий как подмодуль в libs/x
git clone --recurse-submodules <url>Клонировать репозиторий и его подмодули
git submodule update --init --recursiveИнициализировать и получить подмодули после обычного клонирования
git submodule update --remoteОбновить подмодули до их последнего коммита
git submodule statusПоказать коммит каждого подмодуля

Частые случаи

GoalCommand
Клонировать проект, использующий подмодулиgit clone --recurse-submodules <url>
Получить подмодули после клонированияgit submodule update --init --recursive
Обновить подмодуль до последней версииgit submodule update --remote

Частые вопросы о git submodule

Что такое git submodule?
Подмодуль - это репозиторий Git, вложенный в другой репозиторий Git на фиксированном коммите. Родительский репозиторий хранит указатель на этот конкретный коммит, а не файлы подмодуля, поэтому соавторы получают одну и ту же версию. Он используется для подключения зависимости или общего компонента, у которого есть собственный репозиторий и история.
Как клонировать репозиторий с подмодулями?
Используйте git clone --recurse-submodules <url>, чтобы клонировать родительский репозиторий и все его подмодули за один шаг. Если вы уже клонировали без этого флага, выполните после этого git submodule update --init --recursive, чтобы заполнить папки подмодулей.
Как обновить подмодуль до последнего коммита?
Выполните git submodule update --remote, который получает отслеживаемую ветку каждого подмодуля и перемещает его на последний коммит. Затем закоммитьте изменение в родительском репозитории, так как родитель записывает, на какой коммит подмодуля он указывает - обновление не сохраняется, пока вы не закоммитите этот указатель.
Почему папка моего подмодуля пуста после клонирования?
Потому что вы клонировали без --recurse-submodules, так что Git создал папки, но не получил их содержимое. Исправьте это командой git submodule update --init --recursive, которая инициализирует и загружает каждый подмодуль.
Могу ли я потренироваться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнить git submodule в реальной оболочке в вашем браузере - ничего не нужно устанавливать. Бесплатный интерактивный курс Git от Coddy также пошагово охватывает настройку репозитория.
Coddy programming languages illustration

Изучайте Git с Coddy

НАЧАТЬ