Как я формирую патчи к контриб модулям. Захожу директорию модуля, там:
git add .
git commit -m "Initial commit"
Потом копирую модифицированные файлы модуля поверх оригинальных и запускаю:
git diff --no-prefix > add-feeds-target-3050030-3.patch
Это все работало, но недавно я узнал, что это не работает в случае если нужно не изменить существующие файлы, а только добавить новые.
Как тогда быть если нужно только новые файлы добавить?
Комментарии
Делать патчинг через композер.
https://vazcell.com/blog/how-apply-patch-drupal-9-and-drupal-10-composer
https://gorannikolovski.com/blog/how-to-apply-a-patch-in-drupal
Я в курсе, что патчи через композер нужно делать. А как сам патч сформировать?
То есть, у вас сложность не с git'ом и не с composer'ом, а с форматом diff?
Не с композером точно.
П.С. Набор команд сверху я позаимствовал с сайта какого друпалера, но кого именно уже не вспомню.
По логике, новый/добавляемый в патч файл сначала нужно традиционно добавить в текущий локальный репозиторий гита, т.е. закоммитить. После этого уже выгружать diff.
Патч можно сделать без add и commit. Клонируешь нужную ветку с орга. Ну или локально копируешь модуль, тогда надо init, add и commit, чтобы получить отправную точку. Потом редактируешь, добавляешь, удаляешь всё, чио нужно. А потом
а у меня в шапке темы не так?
Ок, пробую традиционно
git add .
git commit -m "Initial commit"
Добавляю в модуль новые файлы
git commit -m "Something add"
git diff --no-prefix > add-feeds-target-3050030-3.patch
Результат - пустой файл.
Пустой файл чего именно? .patch или тот, что вы добавили в репо?
Васёк, ну чуть детальнее и точнее можно описывать? Я уже старый, мне телепатия не поддаётся
да, резулуьтат - пустой .patch файл.
1. Какой путь (относительно директории, в которой выполняется git) до добавленных файлов?
2. Так пробовали:
git add ./
или
git add --all .
Тут
--all
- указание принудительно обновить рабочее деревоПуть директории (кириллицы нет в пути):
~/Projects/local/date_recur
git add .
git commit -m "Initial commit"
Добавляю файлы
git commit -m "Something add"
пишет:
1 file changed, 38 insertions(+)
create mode 100644 src/Feeds/Target/DateRecur.php
потом выполняю:
git diff --no-prefix > add-feeds-target-3050030-3.patch
увы, файл патча пустой
У меня ощущение, что у вас какая-то путаница с путями и по какой-то причине добавленный в репо файл не попадает в рабочее дерево. Т.е.
git add .
не обнаруживает изменений в репозитории.Это и есть ваш добавленный файл?
В любую другую директорию на ПК если ложу модуль для доработки - все тоже самое.
Да, это файл который я добавил в модуль.
А, понял, что ты имел в виду. Смотри здесь https://stackoverflow.com/questions/855767/can-i-use-git-diff-on-untrack...
Если коротко, надо запустить
git add -N имя-нового.файла
И тогда дифф покажет его изменения
git add .
git commit -m "Initial commit"
Копирую новый файл в модуль
git diff --no-prefix > add-feeds-target-3050030-3.patch
Результат. Патч файл создается, но при патчинге модуля Composer-ом новый файл создается не в
src/Feeds/Target/DateRecur.php
а в
Feeds/Target/DateRecur.php
Начало .patch файла:
new file mode 100644
index 0000000..50f74ec
--- /dev/null
+++ src/Feeds/Target/DateRecur.php
Правильный метод создания патча.
git clone --branch '3.x' https://git.drupalcode.org/project/date_recur.git
cd date_recur
git checkout -b 3050030-add-date_recur-feeds-target
# Здесь добавляем новый файл куда нужно
git add . # или git add src/Feeds/Target/DateRecur.php, если вносились изменения в другие файлы
git commit -m "my new feature"
git diff origin/3.x > add-date_recur-geeds-target-3050030-3.patch
Спасибо! Так работает.
После git clone надо перейти в папку склонированного модуля и там уже git checkout
А без git clone можно как-то? Если отталкиваться от git init.
Да, верно, поправил, спасибо!
А зачем?
ну мало ли...