如何应用 /patches 文件夹中的所有 git .patch 文件 - npm
How to apply all git .patch files from /patches folder - 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
推送到补丁文件夹(或修改现有的补丁文件夹)时,它会在构建之前自动应用于包,而无需更改部署脚本。
我发现 this question 这似乎表明
git am --ignore-whitespace patches/*.patch
可能会成功(当然是在 docker 控制台内)。但是,git-am
上的 man
页面显示:
Apply a series of patches from a mailbox
什么邮箱?我想应用文件夹中的更改。尝试 am
命令,控制台抱怨不知道我是谁(想要电子邮件和密码)。
我是否需要将其视为创建 bash 脚本(.sh
文件)、读取文件夹中的所有文件并 运行 多个 [=27] 的简单案例=] 命令在 for
?
是否有更多 "git"-ish way/command 的做法?
使用 npm 脚本会更有意义吗?
git am
可能有用,但对我来说,它抱怨说它无法确定补丁的格式,大概是因为它用于从邮件应用补丁。
为什么不直接使用 git apply
?
而不是这个:
git am --ignore-whitespace patches/*.patch
这样做:
git apply --ignore-whitespace patches/*.patch
这对我有用。
cat ./patches/*patch | git am
它将补丁文件的内容提供给 git am
命令。
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
推送到补丁文件夹(或修改现有的补丁文件夹)时,它会在构建之前自动应用于包,而无需更改部署脚本。
我发现 this question 这似乎表明
git am --ignore-whitespace patches/*.patch
可能会成功(当然是在 docker 控制台内)。但是,git-am
上的 man
页面显示:
Apply a series of patches from a mailbox
什么邮箱?我想应用文件夹中的更改。尝试 am
命令,控制台抱怨不知道我是谁(想要电子邮件和密码)。
我是否需要将其视为创建 bash 脚本(.sh
文件)、读取文件夹中的所有文件并 运行 多个 [=27] 的简单案例=] 命令在 for
?
是否有更多 "git"-ish way/command 的做法?
使用 npm 脚本会更有意义吗?
git am
可能有用,但对我来说,它抱怨说它无法确定补丁的格式,大概是因为它用于从邮件应用补丁。
为什么不直接使用 git apply
?
而不是这个:
git am --ignore-whitespace patches/*.patch
这样做:
git apply --ignore-whitespace patches/*.patch
这对我有用。
cat ./patches/*patch | git am
它将补丁文件的内容提供给 git am
命令。