Git Submodule
Последнее обновление
Подмодуль встраивает один репозиторий Git в другой, закреплённый на конкретном коммите. Родительский репозиторий записывает, от какого коммита подмодуля он зависит, так что все получают одну и ту же версию. Так вы подключаете общую библиотеку или компонент, который живёт в собственном репозитории, не копируя его код.
Попробуйте это в терминальном playground - реальная оболочка в вашем браузере, ничего не нужно устанавливать.
Синтаксис
| Command | What 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 | Показать коммит каждого подмодуля |
Частые случаи
| Goal | Command |
|---|---|
| Клонировать проект, использующий подмодули | 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 также пошагово охватывает настройку репозитория.