magento 2 供应商 git 比较并应用补丁
magento 2 vendor git diff & apply patch
主要是,这个问题特定于 git 和 Magento 2。我有一个工作中的 Magento 2 项目,我已经使用 github repo - https://github.com/Adyen/adyen-magento2 安装了一个扩展。
在我目前的情况下,我必须调试该扩展并检查我的远程服务器。我已经分叉了那个 repo 并创建了一个补丁,例如cc_debug.patch 文件。现在,我已将该补丁添加到本地服务器上的根目录中。然后,如果我使用 git apply --apply --directory=vendor/adyen/module-payment/ cc_debug.patch
执行补丁,它就可以解决问题并修改 vendor 目录下的文件。我将更改推送到 repo,并且由于部署脚本,该文件已移动到远程服务器。
现在,我只有对远程服务器的读取权限,并且没有初始化。git。如果我确实在远程服务器上应用补丁,它肯定会执行,但如果我下次推送,由于部署脚本供应商将重新生成并且补丁应用的更改将会丢失。据我所知,这里出现了一些钩子图片,但我对钩子缺乏了解。
我假设我确实必须在我的 git 本地存储库中创建 post-deploy 挂钩,如下所示:
#!/bin/sh
patchfile = "cc_debug.patch"
patchingdirectory = "vendor/adyen/module-payment/"
if [ -f "$patchfile" ]
then
git apply --apply --directory=$patchingdirectory $patchfile
fi
现在,我无法将该挂钩推送到远程存储库(甚至未初始化),因此该解决方案对我不起作用。或者据我所知 post-update 是远程特定的东西(如果我错了请纠正我)所以我猜测由于这个钩子,更改将在远程服务器上执行但是如果我在另一台本地机器上再次克隆,我必须再次创建 post-部署补丁,所以这不是理想的情况。
有什么解决方案可以让我在每次执行部署脚本时应用补丁? [注意:部署脚本不在我手中,因为它是由 Magento 通过 github 提供的 webhook 执行的。所以,我假设必须有一些 webhook 使用它我必须应用补丁,这又是我缺乏知识。] 我相信有人和我有同样的情况。请指导我。 TIA.
也许您可以使用像 http://github.com/cweagans/composer-patches 这样的作曲家插件来应用补丁。我自己正在使用它来应用尚未进入主线版本的选定核心补丁。
最后,我找到了可以添加构建挂钩的入口点。我修改了 .magento.app.yaml Magento 2 目录的根目录并添加了构建挂钩,如下所示:
hooks:
# We run build hooks before your application has been packaged.
build: |
php ./bin/magento magento-cloud:build
patch -p1 --directory=vendor/adyen/module-payment/ < cc_debug.patch #This is the line I have added.
主要是,这个问题特定于 git 和 Magento 2。我有一个工作中的 Magento 2 项目,我已经使用 github repo - https://github.com/Adyen/adyen-magento2 安装了一个扩展。
在我目前的情况下,我必须调试该扩展并检查我的远程服务器。我已经分叉了那个 repo 并创建了一个补丁,例如cc_debug.patch 文件。现在,我已将该补丁添加到本地服务器上的根目录中。然后,如果我使用 git apply --apply --directory=vendor/adyen/module-payment/ cc_debug.patch
执行补丁,它就可以解决问题并修改 vendor 目录下的文件。我将更改推送到 repo,并且由于部署脚本,该文件已移动到远程服务器。
现在,我只有对远程服务器的读取权限,并且没有初始化。git。如果我确实在远程服务器上应用补丁,它肯定会执行,但如果我下次推送,由于部署脚本供应商将重新生成并且补丁应用的更改将会丢失。据我所知,这里出现了一些钩子图片,但我对钩子缺乏了解。
我假设我确实必须在我的 git 本地存储库中创建 post-deploy 挂钩,如下所示:
#!/bin/sh
patchfile = "cc_debug.patch"
patchingdirectory = "vendor/adyen/module-payment/"
if [ -f "$patchfile" ]
then
git apply --apply --directory=$patchingdirectory $patchfile
fi
现在,我无法将该挂钩推送到远程存储库(甚至未初始化),因此该解决方案对我不起作用。或者据我所知 post-update 是远程特定的东西(如果我错了请纠正我)所以我猜测由于这个钩子,更改将在远程服务器上执行但是如果我在另一台本地机器上再次克隆,我必须再次创建 post-部署补丁,所以这不是理想的情况。
有什么解决方案可以让我在每次执行部署脚本时应用补丁? [注意:部署脚本不在我手中,因为它是由 Magento 通过 github 提供的 webhook 执行的。所以,我假设必须有一些 webhook 使用它我必须应用补丁,这又是我缺乏知识。] 我相信有人和我有同样的情况。请指导我。 TIA.
也许您可以使用像 http://github.com/cweagans/composer-patches 这样的作曲家插件来应用补丁。我自己正在使用它来应用尚未进入主线版本的选定核心补丁。
最后,我找到了可以添加构建挂钩的入口点。我修改了 .magento.app.yaml Magento 2 目录的根目录并添加了构建挂钩,如下所示:
hooks:
# We run build hooks before your application has been packaged.
build: |
php ./bin/magento magento-cloud:build
patch -p1 --directory=vendor/adyen/module-payment/ < cc_debug.patch #This is the line I have added.