Не получается сформировать патч если нужно добавить только новые файлы, а не изменять существующие

Главные вкладки

Аватар пользователя VasyOK VasyOK 5 июля в 13:03

Как я формирую патчи к контриб модулям. Захожу директорию модуля, там:

git init
git add .
git commit -m "Initial commit"

Потом копирую модифицированные файлы модуля поверх оригинальных и запускаю:
git diff --no-prefix > add-feeds-target-3050030-3.patch

Это все работало, но недавно я узнал, что это не работает в случае если нужно не изменить существующие файлы, а только добавить новые.

Как тогда быть если нужно только новые файлы добавить?

Лучший ответ

Аватар пользователя madt madt 9 июля в 21:30

Правильный метод создания патча.

# Переходим в любой другой каталог вне проекта
git clone --branch '3.x' https://git.drupalcode.org/project/date_recur.git
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

Комментарии

Аватар пользователя VasyOK VasyOK 6 июля в 13:08

Не с композером точно.
П.С. Набор команд сверху я позаимствовал с сайта какого друпалера, но кого именно уже не вспомню.

Аватар пользователя OldWarrior OldWarrior 6 июля в 14:17

По логике, новый/добавляемый в патч файл сначала нужно традиционно добавить в текущий локальный репозиторий гита, т.е. закоммитить. После этого уже выгружать diff.

Аватар пользователя gun_dose gun_dose 7 июля в 13:29

Патч можно сделать без add и commit. Клонируешь нужную ветку с орга. Ну или локально копируешь модуль, тогда надо init, add и commit, чтобы получить отправную точку. Потом редактируешь, добавляешь, удаляешь всё, чио нужно. А потом

git diff > lol-kek-cheburek.patch
Аватар пользователя VasyOK VasyOK 7 июля в 16:47

gun_dose wrote: копируешь модуль, тогда надо init, add и commit, чтобы получить отправную точку. Потом редактируешь, добавляешь, удаляешь всё, чио нужно.

а у меня в шапке темы не так?

Аватар пользователя VasyOK VasyOK 7 июля в 16:48

OldWarrior wrote:новый/добавляемый в патч файл сначала нужно традиционно добавить в текущий локальный репозиторий гита, т.е. закоммитить. После этого уже выгружать diff.

Ок, пробую традиционно

git init
git add .
git commit -m "Initial commit"

Добавляю в модуль новые файлы

git add .
git commit -m "Something add"
git diff --no-prefix > add-feeds-target-3050030-3.patch

Результат - пустой файл.

Аватар пользователя OldWarrior OldWarrior 7 июля в 18:21

VasyOK wrote: Результат - пустой файл.

Пустой файл чего именно? .patch или тот, что вы добавили в репо?
Васёк, ну чуть детальнее и точнее можно описывать? Я уже старый, мне телепатия не поддаётся Wink

Аватар пользователя OldWarrior OldWarrior 8 июля в 0:56

1. Какой путь (относительно директории, в которой выполняется git) до добавленных файлов?

2. Так пробовали:

git add ./

или

git add --all .

Тут --all - указание принудительно обновить рабочее дерево

Аватар пользователя VasyOK VasyOK 8 июля в 12:41

Путь директории (кириллицы нет в пути):
~/Projects/local/date_recur

git init
git add .
git commit -m "Initial commit"

Добавляю файлы

git add --all .
git commit -m "Something add"

пишет:

[master 128014d] 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

увы, файл патча пустой

Аватар пользователя OldWarrior OldWarrior 8 июля в 13:41

У меня ощущение, что у вас какая-то путаница с путями и по какой-то причине добавленный в репо файл не попадает в рабочее дерево. Т.е. git add . не обнаруживает изменений в репозитории.

VasyOK wrote: create mode 100644 src/Feeds/Target/DateRecur.php

Это и есть ваш добавленный файл?

Аватар пользователя VasyOK VasyOK 8 июля в 13:46

В любую другую директорию на ПК если ложу модуль для доработки - все тоже самое.
Да, это файл который я добавил в модуль.

Аватар пользователя VasyOK VasyOK 8 июля в 15:45
git init
git add .
git commit -m "Initial commit"

Копирую новый файл в модуль

git add -N src/Feeds/Target/DateRecur.php
git diff --no-prefix > add-feeds-target-3050030-3.patch

Результат. Патч файл создается, но при патчинге модуля Composer-ом новый файл создается не в
src/Feeds/Target/DateRecur.php
а в
Feeds/Target/DateRecur.php

Начало .patch файла:

diff --git src/Feeds/Target/DateRecur.php src/Feeds/Target/DateRecur.php
new file mode 100644
index 0000000..50f74ec
--- /dev/null
+++ src/Feeds/Target/DateRecur.php
Аватар пользователя madt madt 9 июля в 21:30

Правильный метод создания патча.

# Переходим в любой другой каталог вне проекта
git clone --branch '3.x' https://git.drupalcode.org/project/date_recur.git
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
Аватар пользователя VasyOK VasyOK 10 июля в 10:01

Спасибо! Так работает.
После git clone надо перейти в папку склонированного модуля и там уже git checkout

А без git clone можно как-то? Если отталкиваться от git init.