Подмодули

Подмодули

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

Пример подмодулей в профиле репозитория:

Макет страницы репозитория с подмодулями

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

Рекурсивная загрузка подмодулей при клонировании

Передайте опцию --recurse-submodules команде git clone для автоматической инициализации и обновления каждого подмодуля в этом репозитории, включая вложенные подмодули, например:

$ git clone --recurse-submodules https://gitverse.ru/submodules_tutorials/main_repository.git
$ cd main_repository
$ tree
.
├── README.md
└── submodule
    ├── README.md
    └── subsubmodule
        └── README.md
 
3 directories, 3 files

Если вы уже клонировали проект, но забыли указать --recurse-submodules, то см. раздел Рекурсивное обновление подмодулей.

Ручная инициализация и обновление

  1. Клонируйте репозиторий:

    git clone URL_репозитория
  2. Перейдите в каталог репозитория и инициализируйте подмодули, указанные в .gitmodules:

    git submodule init
  3. Обновите подмодули до версии, указанной в родительском репозитории, сохраненной в файле .gitmodules или в метаданных родительского репозитория:

    git submodule update

Добавление подмодуля

Для добавления подмодуля в репозиторий выполните команду git submodule add URL_репозитория, например:

git submodule add https://gitverse.ru/gitverse_tutorials/repository2_submodule.git

Далее сохраните и отправьте изменения:

git add .
git commit -m "a new submodule added"
git push

При первом добавлении подмодуля в вашем репозитории появляется файл .gitmodules для отслеживания и управления подмодулями. В нем хранится URL репозитория подмодуля, путь к нему в вашем репозитории и другие данные.

Пример:

Макет страницы репозитория с подмодулями

Изменение ветки подмодуля

Для изменения ветки подмодуля перейдите в его директорию и выполните команду смены ветки, например:

cd repository2_submodule
$ git checkout feature_branch

Рекурсивное обновление подмодулей

Данная команда обновляет все подмодули до последних версий, инициализирует подмодули, если они еще не были инициализированы, и рекурсивно обновляет все вложенные подмодули:

git submodule update --remote --init --recursive

Удаление подмодулей

Для удаления подмодуля:

  1. удалите соответствующую строку из файла .gitmodules;
  2. удалите соответствующий раздел из .git/config;
  3. выполните git rm --cached path_to_submodule (без завершающего слэша);
  4. выполните коммит в проекте;
  5. удалите ненужные файлы подмодуля.