3

TL,博士;

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

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

到目前为止我已经尝试过:

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

上下文(我将使用它)

目前正在从事一个大型项目,使用相当多的库。我们使用 webpack,前端是 Angular.js,后端是 Yii2。因为开发人员同时使用 linux 和 windows,所以项目是在 docker 映像中编译的。

到目前为止,每当我们需要对库进行更改时,我们都会对其进行 fork 并在以下位置指定 fork 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

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

从邮箱应用一系列补丁

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

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

有没有更多的“git”-ish方式/命令?
使用 npm 脚本执行此操作是否更有意义?

4

2 回答 2

3

git am可能有效,但对我来说,它抱怨它无法确定补丁的格式,大概是因为它是为了从邮件中应用补丁。

为什么不直接使用git apply

而不是这个:

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

做这个:

git apply --ignore-whitespace patches/*.patch
于 2018-09-28T14:41:57.623 回答
0

这对我有用。

cat ./patches/*patch | git am

它将补丁文件的内容提供给git am命令。

于 2021-01-12T08:22:58.220 回答