Подмодули
Подмодули в репозитории используются для включения внешних репозиториев как поддиректорий внутри основного репозитория. Это позволяет управлять зависимостями между различными проектами и версиями программного обеспечения.
Пример подмодулей в профиле репозитория:
Клонирование проекта с подмодулями
Клонирование проекта с подмодулями
Рекурсивная загрузка подмодулей при клонировании
Рекурсивная загрузка подмодулей при клонировании
Передайте опцию --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
, то см. раздел Рекурсивное обновление подмодулей.
Ручная инициализация и обновление
Ручная инициализация и обновление
Клонируйте репозиторий:
git clone URL_репозитория
Перейдите в каталог репозитория и инициализируйте подмодули, указанные в .gitmodules:
git submodule init
Обновите подмодули до версии, указанной в родительском репозитории, сохраненной в файле .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
Удаление подмодулей
Для удаления подмодуля:
- удалите соответствующую строку из файла .gitmodules;
- удалите соответствующий раздел из .git/config;
- выполните
git rm --cached path_to_submodule
(без завершающего слэша); - выполните коммит в проекте;
- удалите ненужные файлы подмодуля.