emteknetnz / vendor-code-patcher
供应商代码修补程序
Requires
- silverstripe/framework: ^4.9 || ^5
README
用于将私有代码补丁直接添加到私有测试仓库,以绕过某些限制,使部署到测试环境更简单。
将您的补丁放入 BASE_PATH . '/_vendor_patches',以便它们与它们所在的模块匹配,例如:
[project_root]/_vendor_patches/silverstripe/framework/0001-FIX-Multiple-files-changed.patch
要求
您部署到的Web服务器需要可用的 patch
工具。这通常适用于典型的debian/ubuntu Web服务器。
使用 wget 从 GitHub pull-requests 生成 .patch 文件(推荐方法)
只需在 pull-request url 后缀 .diff 以获取目标 url,例如
https://github.com/silverstripe/silverstripe-admin/pull/1259.diff
注意,仅后缀 .patch 仅获取多提交 pull-request 的最后一个提交
MYDIFF=https://github.com/silverstripe/silverstripe-admin/pull/1259.diff
MYDIR=_vendor_patches/silverstripe/admin
MYPATCH=0001-my.patch
mkdir -p $MYDIR
wget -O $MYDIR/$MYPATCH $MYDIFF
wget 将为您解决任何重定向
重要 - 使用 wget 下载 diff 而不是通过浏览器复制粘贴,以保留字符编码。这对于包含特殊空格字符(例如 nbsp)的压缩 bundle.js 类型的文件尤其重要。从浏览器复制粘贴通常会错误地将这些字符转换为常规空格,导致补丁无法应用。
从本地文件生成 .patch 文件
常规做法是在私有仓库中有一个 pull-request,用于将未发布的补丁压缩成一个单独的提交。
复制这个单独提交的 sha
cd vendor/silverstripe/framework
git remote add my-private-account git@github.com:my-private-account/silverstripe-framework.git
git fetch my-private-account
git format-patch -1 [sha]
应用补丁
补丁在第一次 ?flush=1 时自动应用 - 这应该是部署的一部分
然后,补丁文件将被移动到 [project_root]/_vendor_patches/_patched,这样它们就不会在后续的 flush 中运行
关于生成的 bundle.js 类型文件的说明
由于您本地的 git 在检出时存在细微差异,您可能无法将补丁应用于生成的 bundle.js 类型的文件。
如果您遇到问题,手动用从 GitHub 粘贴的原始版本替换您本地的 bundle.js 复制应该可以解决任何问题。
在本地项目中测试补丁
为了将补丁应用到本地项目以确保补丁文件有效
patch -p1 -l -r - -B /tmp/ -d vendor/silverstripe/framework < '_vendor_patches/silverstripe/framework/0001-my.patch'