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

时间:2018-09-28 11:47:46

标签: git npm-scripts git-patch patch-package

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推送到patch文件夹中(或修改现有的文件夹),它就可以在构建之前自动应用于该软件包,而无需更改部署脚本。

我发现this question似乎暗示

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

可以做到这一点(当然,在Docker控制台内部)。但是,git-am上的man页显示:

  

从邮箱中应用一系列补丁

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

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

是否还有更多“ git”式的方法/命令?
使用npm脚本进行操作是否更有意义?

2 个答案:

答案 0 :(得分:2)

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

为什么不只使用git apply

代替此:

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

执行此操作:

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

答案 1 :(得分:0)

这对我有用。

cat ./patches/*patch | git am

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