git submodules
Добавление субмодуля
Добавить субмодуль можно командой:
git submodule add [-b branch] [--name name] url path
Например:
git submodule add -b master ../../bf531/libaaa shared/libaaa
Лучше чтобы URL был относительным (само собой если репозиторий
находится на том же сервере). Иначе могут быть проблемы
при клонировании разными способами (по ssh, https и т. п.).
Изменить url субмодуля
Новый способ
git submodule set-url -- <path> <url>
Пример:
git submodule set-url -- shared/libglobal ../../libs/libglobal
Старый способ
Отредактировать файл .gitmodules.
Можно редактировать как обычный файл, а можно командами с консоли:
git config --file=.gitmodules submodule.libaaa.url ../../bf531/libaaa git config --file=.gitmodules submodule.libaaa.branch dev-branch
После этого вызвать:
git submodule sync git submodule update --init --recursive
Удалить субмодуль
- Удалить секцию из
.gitmodules. - Удалить секцию из
.git/config. - Запустить
git rm --cached path_to_submodule(без слеша на конце). - Закоммитить изменения
git add .gitmodules; git commit -m "remove submodule" - Удалить каталог с файлами субмодуля
rm -rf path_to_submodule.
sname=libaaa spath=shared/libaaa git config -f .gitmodules --remove-section submodule.${sname%/} git config -f .git/config --remove-section submodule.${sname%/} git rm --cached ${sname%/} git add .gitmodules git commit rm -rf ${spath%/}
Инициализация субмодулей по существующему файлу .gitmodules
#!/bin/sh set -e git config -f .gitmodules --get-regexp '^submodule\..*\.path$' | while read path_key path do url_key=$(echo $path_key | sed 's/\.path/.url/') url=$(git config -f .gitmodules --get "$url_key") git submodule add $url $path done