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脚本进行操作是否更有意义?
答案 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
命令。