Как применить все файлы git .patch из папки /patches - npm

TL,DR;

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

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

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

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

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

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

До сих пор всякий раз, когда нам нужно было внести изменения в библиотеку, мы разветвляли ее и указывали разветвление в 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?

2 ответа

Решение

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

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

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

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

сделай это:

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

Это сработало для меня.

cat ./patches/*patch | git am

Он передает содержимое файлов патчей в git amкоманда.

Другие вопросы по тегам