Как использовать Git submodule

Источник: «How to Use Git Submodules – Explained With Examples»
В этой статье мы погрузимся в мир подмодулей Git, чтобы лучше понять, как они работают.

Git — важный инструмент для разработчиков. Он помогает организовать совместную работу, эффективно отслеживать изменения и поддерживать целостность проекта в распределённых средах.

По мере роста сложности и масштаба проектов растут и зависимости. Поэтому необходим механизм, позволяющий управлять зависимостями по мере их роста. Этот механизм известен как подмодули/submodule Git.

Предварительные требования

Что такое Git submodule

Git submodule — это Git-репозиторий, существующий внутри другого Git-репозитория.

Его можно рассматривать как дочерний репозиторий или подмножество основного репозитория.

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

Разница между репозиторием и подмодулем

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

Все подмодули являются репозиториями, но не все репозитории являются подмодулями.

Как добавить Git submodule

Чтобы добавить Git submodule, сначала убедитесь, что находитесь в репозитории Git, и у вас есть URL удалённого репозитория, который планируете добавить в качестве подмодуля.

Затем используйте команду git submodule add, после чего укажите URL репозитория, который необходимо добавить.

git submodule add <submodule_url>

Приведённая выше команда по умолчанию добавит подмодуль на корневой уровень основного репозитория.

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

git submodule add <submodule_url> <path>

Где:

Файл .gitmodules

После создания нового подмодуля git с помощью команды git submodule add в корневой уровень основного репозитория будет добавлен новый файл .gitmodules.

.gitmodules — это файл конфигурации, используемый Git'ом для хранения информации о подмодулях, присутствующих в репозитории. Он содержит подробные сведения о каждом подмодуле, такие, как их URL и пути.

Этот файл помогает убедиться, что при клонировании или обновлении репозитория с подмодулями Git знает, откуда брать содержимое подмодулей и какие версии этих подмодулей использовать.

Пример, как выглядит файл .gitmodules:

[submodule "example"]
path = example
url = https://github.com/example/example.git

Если в проекте более одного подмодуля, файл .gitmodules будет выглядеть так:

[submodule "submodule1"]
path = submodule1
url = https://github.com/example/submodule1.git

[submodule "submodule2"]
path = submodule2
url = https://github.com/example/submodule2.git

[submodule "submodule3"]
path = submodule3
url = https://github.com/example/submodule3.git

Как не надо добавлять подмодули

Иногда может возникнуть соблазн использовать команду git clone, чтобы добавить репозиторий в качестве зависимости в свой репозиторий. Не поддавайтесь этому искушению!

Если использовать команду git clone, то в терминале Git Bash появится следующее сообщение: Вы добавили другой git-репозиторий внутрь вашего текущего репозитория. Клоны внешнего репозитория не будут содержать содержимое встроенного репозитория и не будут знать, как его получить...

Существует две причины, по которым не следует использовать команду git clone вместо git submodule add:

  1. Директория подмодуля будет пуста, когда вы отправите код в удалённый репозиторий.
  2. Клоны внешнего репозитория (основного репозитория) не будут содержать содержимое встроенного репозитория (подмодуля) и не будут знать, как его получить.

Вышеперечисленные причины являются следствием отсутствия файла .gitmodules (автоматически добавляемого при использовании команды git submodule add) на корневом уровне основного репозитория.

Ручное добавление файла .gitmodules на корневой уровень основного репозитория устранит описанные выше проблемы. Однако создание подмодуля с помощью команды git submodule add предотвратит их.

Как клонировать репозиторий с подмодулями Git

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

git submodule init: Эта команда инициализирует подмодули, определённые в репозитории. Когда выполняется клонирование репозитория, содержащего подмодули, Git не получает содержимое подмодулей автоматически. Для их инициализации необходимо сначала выполнить команду git submodule init.

Git считывает файл .gitmodules в репозитории для настройки подмодулей и готовится получить содержимое подмодулей, когда выполняется git submodule update.

git submodule update: Эта команда извлекает последние коммиты из репозиториев подмодулей.

Если в репозиториях подмодулей появились новые коммиты, возможно, потребуется выполнить git submodule update, чтобы обновить подмодули до актуального состояния.

Чтобы клонировать репозитории, в которых есть подмодули, первое, что необходимо сделать, это запустить команду git clone для этого репозитория.

git clone <repository_URL>

После этого выполнить команду git submodule init на корневом уровне основного репозитория.

git submodule init

Затем выполнить команду git submodule update.

git submodule update

Заключение

Подмодули Git служат механизмом для эффективного управления зависимостями в проекте. Они позволяют беспрепятственно включать внешние репозитории в основной проект, сохраняя чёткие границы между компонентами и облегчая совместную работу.

Используя подмодули, разработчики могут оптимизировать рабочие процессы, поддерживать целостность проекта и обеспечивать эффективное сотрудничество, что в конечном итоге способствует созданию более надёжных и масштабируемых процессов разработки.

Дополнительные материалы

Предыдущая Статья

Рефакторинг метода с опциональными параметрами

Следующая Статья

Подробнее об атрибуте Override