- PVSM.RU - https://www.pvsm.ru -
В этой статье будут рассмотрены основные приемы работы с подмодулями гита [1], если использовать их вместе с друпалом.
Наиболее полезным этот пост будет для тех кто, имея скромный опыт работы с гитом, попал на Drupal-проект где используются подмодули. (Именно так я познакомился с подмодулями и именно такой статьи мне в то время очень не хватало.)
У нас есть линукс, установлен drush [2] и есть инсталяция седьмого друпала. Основной репозиторий хранит в себе ядро друпала (и, возможно, наши кастомные модули). Все команды выполняются из корневого каталога исталяции друпала, если не указано иное. Модуль — модуль друпала, подмодуль — подмодуль гита.
Подмодули — это обычные гит репозитории. Они хранятся отдельно от основного репозитория.
В репозитории проекта хранится список используемых подмодулей, их расположение и УРЛы (в файле .gitmodules
) и информация о том какое конкретное состояние (версия/релиз/коммит/тег) подмодуля будет использовано (в недрах каталога .git
).
Если в вашем проекте используются подмодули, то лучше всего каждый раз после git pull
выполнять еще и эти команды:
git submodule sync # обновляем используемые УРЛы репозиториев
git submodule update --init # устанавливаем новые подмодули и обновляем состояние уже установленных
Команда драша dl
умеет работать с модулями как с подмодулями гита:
drush dl module_name --package-handler=git_drupalorg --gitsubmodule
Драш поддерживает работу только с официальным репозиторием — git.drupal.org
.
Что бы постоянно не писать дополнительные параметры команды dl
, можно настроить значения параметров драша используемые по умолчанию добавив в drushrc.php
следующие строки:
$options['package-handler'] = 'git_drupalorg';
$options['gitsubmodule'] = TRUE;
В этом случае все модули по умолчанию будут скачиваться как подмодули гита и можно писать просто:
drush dl module_name
Если же подмодуль нужно установить вручную, например, не из официального репозитория, тогда пользуемся обычной коммандой гита:
git submodule add git://github.com/example/module_name.git sites/all/modules/module_name
После чего нужно перейти в каталог установленного подмодуля и переключиться на нужный релиз:
git checkout 7.x-1.0
Если скачать модуль «по старинке» с сайта drupal.org, то версия модуля будет указана в файле module_name.info
. Она добавляется в этот файл автоматически при создании релиза, в репозитории ее нет.
Что бы друпал сам мог определять версию модулей нужен модуль git_deploy [3]. Он дополняет информацию полученную друпалом из info-файлов добавляя в нее версию модуля, которую он «добывает» используя различные команды гита. Использовать подмодули без git_deploy
можно, но вы не сможете пользоваться обновлением через drush up
, потому что друпал не будет знать текущей версии установленных модулей.
Узнать версию модуля можно еще и так:
git submodule status | grep module_name
В скобках будет указан тег который используется в нашем проекте.
Команда для обновления используется самая обычная:
drush up module_name
Опять же, она будет работать только если у нас установлен git_deploy
.
Если нам нужно обновить модуль вручную, скажем, мы хотим обновится до определенной версии. Тогда из каталога подмодуля запускаем две команды:
git fetch # обновляем информацию из удаленного репозитория
git checkout 7.x-3.5 # переключаем код на требуемый релиз (тег)
После этого не забываем запустить обновления базы данных:
drush updb
Сначала желательно переключить подмодуль на определенный бранч потому как
Например, если мы использовали версию модуля 7.x-3.5, переключимся на рабочую ветку этого релиза:
git fetch # обновляем информацию из удаленного репозитория
git checkout 7.x-3.x # переключаемся на рабочую ветку
git pull # обновляем ветку
Применям патч используя командную строку [4], вашу любимую IDE или прочие инструменты.
Создаем отдельный репозиторий для модуля который мы пропатчили. Например, на гитхабе.
Обновляем УРЛ репозитория вашего подмодуля. Для этого находим соответствующую секцию в файле .gitmodules
, например:
[submodule "sites/all/modules/module_name"]
path = sites/all/modules/module_name
- url = git://git.drupal.org/project/module_name.git
+ url = https://github.com/example/module_name.git
Что бы гит начал использовать новый УРЛ, выполняем:
git sybmodule sync
Теперь можно закоммитить наши изменения и запушить всё в наш новый репозиторий. Из каталога подмодуля выполняем:
git commit -m "Applied patch from http://drupal.org/node/00000#comment-0000000"
git push
В ваш репозиторий попадет и ваш коммит и вся предыдущая история модуля.
Иногда требуется обновить модуль в который мы вносили свои изменения, например, в связи с выходом обновления безопасности или появления новых нужных нам фич.
Самым простым решением будет обновление из рабочей ветки официального репозитория. Например, если ранее мы пропатчили модуль на основе бранча 7.x-3.x, из каталога его подмодуля запускаем:
git pull http://git.drupal.org/project/module_name.git 7.x-3.x
(Если честно, это единственный способ которым я пользовался до этого момента.)
Если ваш патч закоммитили или же он больше не нужен, есть смысл вернуть подмодуль на обеспечение git.drupal.org
. Для этого обновляем (возвращаем прежний) УРЛ, снхронизируем УРЛы подмодулей, делаем git fetch
из каталога подмодуля и чекаутим нужный релиз. Все это описано выше.
Простой команды нет, но есть рецепт со stackoverflow [5]:
.gitmodules
и .git/config
,git rm --cached sites/all/modules/module_name
,В контексте друпала использование подмодулей дает ряд преимуществ. Патчить модули становится удобней, а поддерживать их при этом в актуальном состоянии — легко. Вы можете использовать пропатченые или ваши собственные модули в нескольких проектах, при этом централизованно ведя работу над ними. А если учесть, что для работы с подмодулями нужно освоить всего лишь несколько простых приемов, то мы получаем сплошные плюсы и делаем вывод что подмодули — это простой и эффективный инструмент который можно и нужно использовать в Drupal-проектах.
Автор: Leksat
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/git/24187
Ссылки в тексте:
[1] подмодулями гита: http://git-scm.com/book/ru/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B-Git-%D0%9F%D0%BE%D0%B4%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B8
[2] drush: http://drupal.org/project/drush
[3] git_deploy: http://drupal.org/project/git_deploy
[4] командную строку: http://drupal.org/patch/apply
[5] рецепт со stackoverflow: http://stackoverflow.com/a/1260982/580371
[6] Источник: http://habrahabr.ru/post/164019/
Нажмите здесь для печати.