С переходом в 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. Ну и кинуть патч в ишью самого модуля не забудьте, для общего блага.

