Введение
При развертывании проектов основанных на модульных приложениях (например, Magento) сталкиваешься с тем, что в проекте сосуществует код, находящийся в различных репозиториях. PhpStorm вполне хорошо справляется с подобной ситуацией. Допустим, у нас есть основной проект, расположенный на Github'е, в котором используются один новый модуль, расположенный там же, и один legacy-модуль, расположенный в SVN-репозитории:
- основной проект: https://github.com/praxigento/z_git_submodules_main.git (Git)
- новый модуль: https://github.com/praxigento/z_mage_composer_mod_01.git (Git)
- legacy-модуль: https://github.com/praxigento/z_mage_composer_mod_02/trunk (Git as SVN)
Работать одновременно с несколькими git-репозиториями позволяет механизм git submodules, а PhpStorm также позволяет к этому добавить и SVN-репозиторий.
Формируем проект
Клонируем основной проект, в котором еще нет субмодулей, на локальный диск:
git clone https://github.com/praxigento/z_git_submodules_main.git
cd .\z_git_submodules_main
# добавляем субмодули
git submodule add https://github.com/praxigento/z_mage_composer_mod_01.git modules/mod01
В файле .gitmodules появлется нечто типа:
[submodule "modules/mod_git"]
path = modules/mod_git
url = https://github.com/praxigento/z_mage_composer_mod_01.git
При клонировании основного проекта, в котором уже подключены git-субмодули нужно дополнительно их инициировать:
git submodule init
git submodule update
Удаление субмодуля
Отдельно подключаем SVN-модуль:
svn co https://github.com/praxigento/z_mage_composer_mod_02/trunk modules/mod_svn
Должна получится примерно такая файловая структура:
Настройка PhpStorm
Указываем в настройках PhpStrom все точки монтирования репоизториев в нашем проекте:
Работа с изменениями
Вносим изменения в README файлы в каждом из модулей и в самом проекте (всего три файла):
Коммитим изменения в репозитории:
Для git-репозиториев дополнительно push'аем изменения:
Проверяем изменения во всех репозиториях:
Таким образом, мы имеем возможность коммитить наши изменения в несколько репозиториев за раз.
Обновление локального кода: