Как применить все файлы git .patch из папки / patches - npm - PullRequest
0 голосов
/ 28 сентября 2018

TL, DR;

Я ищу команду git, сценарий bash или метод (сценарий) npm, чтобы взять все файлы .patch в папке и запустить

git apply --ignore-whitespace patches/{filename}

Что я пробовал до сих пор:

git am --ignore-whitespace patches/*.patch

Контекст (для чего я буду его использовать)

В настоящее времяработая над большим проектом, используя множество библиотек.Мы используем webpack, фронтенд - Angular.js, бэкэнд на Yii2.Поскольку разработчики используют как Linux, так и Windows, проект скомпилирован в образе докера.

До сих пор, когда нам нужно было внести изменения в библиотеку, мы разветвляли ее и указывали вилку в package.json:

"package-name":"git+https://github.com/{git-user}/{package-name}"

и ... это работает.

Недавно я узнал о возможно лучшем способе применения патчей к модулям, который составляет patch-package.Короче говоря, он избегает разветвления, сохраняя изменения в файле .patch.

Однако создания файла исправления недостаточно.При развертывании его также необходимо применить перед сборкой.Что переводит в следующую строку в сценарии развертывания:

docker exec -it {container-name} bash -c "git apply --ignore-whitespace patches/{package-name}+{package-version}.patch"

, который должен быть запущен перед тем, который запускает npm run build.

И, опять же, он работает.


Вопрос

Я ищу способ автоматизировать захват каждого файла в папке patches/ и применять его, без указанияих один за другим .Так что всякий раз, когда новый .patch помещается в папку патчей (или изменяется существующий), он автоматически применяется к пакету перед сборкой, без необходимости изменять сценарий развертывания.

Я нашел этот вопрос , который, по-видимому, подсказывает

git am --ignore-whitespace patches/*.patch

, может помочь (конечно, внутри консоли докера).Однако на странице man на git-am написано:

Применить серию исправлений из почтового ящика

Какой почтовый ящик?Я хочу применить изменения из папки.При попытке ввести команду am консоль жалуется, что не знает, кто я (требуется электронная почта и пароль).

Нужно ли рассматривать это как простой случай создания сценария bash (файл .sh), чтения всех файлов из папки и запуска нескольких команд git apply в for?

Есть ли более "мерзкий" способ / команда для этого?
Будет ли разумнее делать это с помощью сценария npm?

1 Ответ

0 голосов
/ 28 сентября 2018

git am может сработать, но я жалуюсь, что не могу понять, в каком формате находится патч, предположительно потому, что он предназначен для применения патчей из почты.

Почему бы просто не использовать git apply?

Вместо этого:

git am --ignore-whitespace patches/*.patch

сделать это:

git apply --ignore-whitespace patches/*.patch
...