![](/img/trans.png)
[英]How to git format-patch and git am/apply to move all patches from very first to the latest on a branch in a git repo to brand new git repo
[英]How to apply all git .patch files from /patches folder - npm
TL,博士;
我正在寻找一个 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
之前npm run build
。
而且,它再次起作用。
题
我正在寻找一种方法来自动获取patches/
文件夹中的每个文件并应用它们,而不必一个一个地指定它们。 因此,无论何时将新的.patch
推送到补丁文件夹中(或修改现有的),它都会在构建之前自动应用于包,而无需更改部署脚本。
我发现这个问题似乎暗示
git am --ignore-whitespace patches/*.patch
可能会成功(当然在 docker 控制台内)。 但是, git-am
上的man
页说:
从邮箱应用一系列补丁
什么邮箱? 我想应用文件夹中的更改。 尝试am
命令时,控制台抱怨不知道我是谁(想要电子邮件和密码)。
我是否需要将其视为创建 bash 脚本( .sh
文件)、从文件夹中读取所有文件并在for
运行多个git apply
命令的简单案例?
是否有更多“git”-ish 方式/命令来执行此操作?
使用 npm 脚本是否更有意义?
git am
可能有用,但对我来说,它抱怨它无法确定补丁的格式,大概是因为它是为了从邮件应用补丁。
为什么不直接使用git apply
?
取而代之的是:
git am --ignore-whitespace patches/*.patch
做这个:
git apply --ignore-whitespace patches/*.patch
这对我有用。
cat ./patches/*patch | git am
它将补丁文件的内容提供给git am
命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.