С переходом в Drupal 8 на composer запихивать контрибные модули и само ядро в git стало совсем не удобно и не правильно. Но хакать (точнее, делать лучше!) модули и ядро все равно хочется. К счастью, с композером это даже удобнее.
Допустим, мы внесли изменения в модуль contrib_module и хотим их увековечить в своем гите. Действия следующие:
-
Ставим пакет
cweagans/composer-patches
:composer require cweagans/composer-patches
-
Хакаем, собственно, модуль.
-
Переходим в директорию с модулем и делаем патч:
git diff HEAD > contrib_module_patch_1.patch
Если в директории модуля отсутсвует
.git
и патч поэтому сделать не получается — удаляем модуль и ставим заново:composer require drupal/contrib_module --prefer-source
Теперь патч должен получиться.
-
Переносим патч в какую-нибудь отдельную директорию, например
/patches
в корне проекта. -
Сбрасываем изменения в директории модуля:
git checkout .
-
В
composer.json
в секциюextra
добавляем:"patches": { "drupal/contrib_module": { "patches/contrib_module_patch_1.patch": "patches/contrib_module_patch_1.patch" // тут будут другие патчи этого модуля } // а тут патчи других модулей }
- Теперь при запуске
composer install
патч будет применяться автоматически. И если код модуля обновится так, что патч станет неприменим (например, его включат в код модуля) — композер ругнется и мы сможем проверить, в чем дело.
Дополнительная плюшка: в patches
можно добавлять не только рукотворные патчи, но и прямые ссылки на патчи, например, с D.org.
P.S. Ну и кинуть патч в ишью самого модуля не забудьте, для общего блага.