Работа с подмодулями достаточно проста хоть и на первый взгляд кажется сложной. В данном примере мы будем вностить изменения в подмодуль subproject
, который по сути является обычной директорией основного проекта main_project
Для наглядности процесса изменения и обновления подмодуля можно посмотреть этот туториал: https://www.youtube.com/watch?v=Qe6_foSbWaQ
Допустим мы уже клонировали проект main_project
, который содержит подмодуль subproject
и нам понадобилось внести изменения в подмодуль subproject
.
cd subproject # переходим в директорию подмодуля
touch newfile.txt # создаем новый файл в подмодуле
git add . # добавляем в индекс
git commit -m 'Добавлен newfile.txt' # комитим
git push # пушим
cd .. # возвращаемся назад в main_project
git commit -m 'Обновлена версия подмодуля subproject' # указываем основному проекту версию подмодуля
git push
Рассмотрим процесс подробнее на примере изменения подмодуля
subproject
который расположен в проектеmain_project
(основной проект, родительский).
Предствим ситуацию, когда вы с командой работаете над проектом с подмодулями.
Для начала мы можем проверить текущую версию подмодуля, а точнее узнать коммит (SHA) подмодуля на который ссылается основной проект:
# находясь в основном репозитории main_project
git submodule status
# 04fcb0081670212dfcad48895696558343050649
Команда вернула нам хэш комита подмодуля, на который ссылается основной проект. Проверку версии (хеша коммита) так же можно выполнить командой ниже, но работает она немного иначе:
git ls-tree HEAD | grep commit
Переходим в директорию подмодуля
cd subproject
переходим в ветку master
и спуливаем изменения subproject
git checkout master
git pull
Ответвляемся от master
подмодуля и создаем новую ветку для изменений
git checkout -b change-subproject
...выполняем необходимые изменения
добавляем изменения и комитим
git add .
git commint -m 'Добавлены новые изменения в подмодуль'
пушим ветку с изменениями и создаем PR в проекте subproject
git push origin change-subproject
переходим в каталог подмодуля
cd subproject
переходим в мастер и забираем наши комиты
git checkout master
git pull
переходим в основной проект
# если находились в subproject
cd ..
пока не закомитили новую версию можем посмотреть как изменился хэш версии (комита) сабмодуля
git diff subproject
комитим новую версию и пушим
git commit -am 'Обновлена версия подмодуля subproject'
git push
Посмотрим, что версия (коммит) подмодуля, на которую ссылается основной проект была обновлена:
git submodule status