如何应用 /patches 文件夹中的所有 git .patch 文件 - npm

And*_*hiu 5 git git-patch npm-scripts patch-package

TL,博士;

我正在寻找 git 命令、bash 脚本或 npm 方法(脚本)来获取.patch文件夹中的所有文件并运行

git apply --ignore-whitespace patches/{filename}
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的:

git am --ignore-whitespace patches/*.patch
Run Code Online (Sandbox Code Playgroud)

上下文(我将用它做什么)

目前正在进行一个大型项目,使用相当多的库。我们使用 webpack,前端是 Angular.js,后端是 Yii2。由于开发人员同时使用 Linux 和 Windows,因此该项目是在 docker 映像内编译的。

到目前为止,每当我们需要对库进行更改时,我们都会对它进行分叉并在以下位置指定分叉package.json

"package-name":"git+https://github.com/{git-user}/{package-name}"
Run Code Online (Sandbox Code Playgroud)

而且...它有效。

我最近发现了一种可以说是更好的将补丁应用于模块的方法,那就是patch-package. 简而言之,它避免了分叉,将更改保存在.patch文件中。

然而,创建补丁文件还不够。在部署时,也需要在构建之前应用。这将转换为部署脚本中的以下行:

docker exec -it {container-name} bash -c "git apply --ignore-whitespace patches/{package-name}+{package-version}.patch"
Run Code Online (Sandbox Code Playgroud)

其中必须在运行之前运行npm run build

而且,它再次有效。


问题

我正在寻找一种方法来自动获取patches/文件夹内的每个文件并应用它们,而无需逐一指定它们。这样,每当.patch将新的补丁推送到补丁文件夹中(或者修改现有的补丁)时,它都会在构建之前自动应用于包,而无需更改部署脚本。

我发现这个问题似乎表明

git am --ignore-whitespace patches/*.patch
Run Code Online (Sandbox Code Playgroud)

可能会成功(当然是在 docker 控制台内)。然而,man页面上git-am说:

从邮箱应用一系列补丁

什么邮箱?我想应用文件夹中的更改。尝试该am命令,控制台抱怨不知道我是谁(需要电子邮件和密码)。

我是否需要将其视为创建 bash 脚本(.sh文件)、从文件夹中读取所有文件并git apply在 a 中运行多个命令的简单情况?for的简单情况?

有没有更“git”的方式/命令来做到这一点?
使用 npm 脚本来做这件事会更有意义吗?

Jos*_*osh 5

git am可能有用,但对我来说,它抱怨它无法计算出补丁的格式,大概是因为它是用于从邮件应用补丁的。

为什么不直接使用git apply呢?

而不是这个:

git am --ignore-whitespace patches/*.patch
Run Code Online (Sandbox Code Playgroud)

做这个:

git apply --ignore-whitespace patches/*.patch
Run Code Online (Sandbox Code Playgroud)