Как применить все файлы 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
команда.