修补 Magento 1.7.1 Hunk #1 时出错
Error patching Magento 1.7.1 Hunk #1 Failed at
我在我的 Magento 仪表板 v.1.7.0.2 中看到最后一个 Critical Reminder
通知 (2 important security patches (SUPEE-5344 and SUPEE-1533)...)
因此,我在其他 Magento 中正确下载并安装了它们(例如 1.6.0
、1.6.1
),但我在这个版本中遇到了这些错误 1.7.0.2
[root@oc1 httpdocs]# sh PATCH_SUPEE-1533_EE_1.12.x_v1-2015-02-10-08-19-16.sh
Checking if patch can be applied/reverted successfully...
ERROR: Patch can't be applied/reverted successfully.
patching file app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php
Hunk #1 FAILED at 444.
1 out of 1 hunk FAILED -- saving rejects to file app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php.rej
patching file app/code/core/Mage/Adminhtml/controllers/DashboardController.php
Hunk #1 FAILED at 92.
1 out of 1 hunk FAILED -- saving rejects to file app/code/core/Mage/Adminhtml/controllers/DashboardController.php.rej
我正在搜索并找到了这个 Magento patch failing to install post,但它对我不起作用
我在 windows、Mac 和 Linux 上下载了 .sh 文件,结果是一样的...有什么想法吗?
我在本地机器上使用 Windows。服务器当然是Linux。我使用 Git 进行版本控制。
长话短说:尝试使用 dos2unix
实用程序来尝试获取 .php 文件的行结尾以匹配 .sh 补丁文件。 (我想你也可以 运行 .sh 文件上的 dos2unix 或 .sh 文件上的 unix2dos - 一些组合使它们相同)。
尽管我认为您的错误消息看起来与我的有些不同。事实上,你看过 'reject file' 了吗?如果这不是行尾故障,您能想到 1.6 和 1.7 安装之间有什么不同吗? (我已经使用此处描述的方法修补了 1.7.0.2 和 1.9.0.1)。如果您检查 Graph.php 文件,其中是否有任何编辑?
以下是对我有用的更多信息:
我使用了 Cygwin(Gitbash 似乎在 Linux 和 Windows 文件路径之间挣扎,并给出了错误 /app/etc must exist
)。此外,我还必须 运行 Cygwin 作为管理员来解决文件权限错误(这很奇怪,可能是我的设置所独有的)。
但我需要做的主要事情是 运行 dos2unix
补丁试图 diff
的文件。我通过编辑 .sh 补丁文件来完成此操作,您可以在文件末尾看到该文件具有将要更改的文件的路径。
所以我编辑了 .sh 文件,在第 66 行的评论之前添加了这两行 # 5. File pathes
:-
# extra steps for windows CRLF:
dos2unix app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php
dos2unix app/code/core/Mage/Adminhtml/controllers/DashboardController.php
您可能要考虑 B 计划并手动编辑文件;变化不大。
补丁 5344 确实还有一些变化。对于那个,我在文件 PATCH_SUPEE-5345_CE_1.7.0.2_v1-2015-02-10-08-11-22.sh
中的评论 # 5. File pathes
之前添加了这些行:-
# extra steps for windows CRLF:
dos2unix lib/Varien/Db/Adapter/Pdo/Mysql.php
dos2unix app/code/core/Mage/XmlConnect/Model/Observer.php
dos2unix app/code/core/Mage/Oauth/controllers/Adminhtml/Oauth/AuthorizeController.php
dos2unix app/code/core/Mage/Core/Controller/Request/Http.php
dos2unix app/code/core/Mage/Admin/Model/Observer.php
这对我有用。我阅读了一些 Stack Overflow 的答案来想出这个解决方案。 'patch' 命令似乎对行尾非常敏感。您可能会尝试的另一件事是将 -w 标志添加到 diff 命令中(再次通过编辑 .sh 文件),这可能会使 diff 在行的开头和结尾忽略白色 space 但它不适用于我。
http://unixhelp.ed.ac.uk/CGI/man-cgi?diff
作为最后的陷阱,我会注意到我需要通过重新 运行 将 Cygwin setup-x86.exe
'install or update' 程序添加到 Cygwin 来添加 patch
命令在包含 patch
.
的开发包中
如果在 Magento 中打补丁的文件的行尾与补丁文件本身不同,您会看到上面的 HUNK 错误。
例如:
- 正在修补的文件:Windows 行结尾
- 补丁文件:Unix 行结尾
如果是这种情况,您需要更改与所在系统不匹配的文件的行尾 运行。
即:
- 如果 运行ning on Linux,确保两者都有 Unix 行结尾。
- 如果在 Windows 上 运行ning,请确保两者都有 Windows 行结尾。
您可以在 Sublime 编辑器中轻松执行此操作:查看 > 行尾 >(选择正确的)
如果你运行正在 Linux 上安装并且正在修补的文件有 Windows 行结尾(我的行结尾出于某种原因显然 PHP 没有'不要介意),将补丁文件更改为也有 Windows 行结尾会导致此神秘错误:
$ sh PATCH_SUPEE-2629_EE_1.12.0.0_v1.sh
: command not found_1.12.0.0_v1.sh: line 7:
'ATCH_SUPEE-2629_EE_1.12.0.0_v1.sh: line 9: syntax error near unexpected token `{
'ATCH_SUPEE-2629_EE_1.12.0.0_v1.sh: line 9: `_check_installed_tools() {
有关详细信息,请参阅 Magento patch failing to install
我的解决方案也使用 dos2unix,但这对我有用:
第 1 步
在 linux 终端中我有 运行 cat PATCH------something---.sh | grep "diff "
,这导致补丁中涉及的所有文件。
提示:如果文件很多,请使用浏览器添加> diff_files.txt
和download/access。
第 2 步
将 diff 与文件路径 指令复制到 notepad++ (我假设您正在使用 Windows, 这就是行结尾发生的原因).
你会得到这样的东西:
<strong>差异 --git</strong> app/code/core/Mage/Adminhtml/Helper/Sales.php app/code/core/Mage/Adminhtml/Helper/Sales.php
<strong>差异 --git</strong> app/code/core/Mage/Core/Model/Config.php app/code/core/Mage/Core/Model/Config.php
<strong>diff --git</strong> lib/Varien/File/Uploader.php lib/Varien/File/Uploader.php
可以看到,文件路径重复了;没关系。
第 3 步
现在只需将 diff --git
替换为 dos2unix
,将结果复制到 ssh 终端,记住您需要在 Magento 中根文件夹。 dos2unix会调用同一个文件两次,但是没有问题。
<strong>dos2unix</strong> app/code/core/Mage/Adminhtml/Helper/Sales.php app/code/core/Mage/Adminhtml/Helper/Sales.php
<strong>dos2unix</strong> app/code/core/Mage/Core/Model/Config.php app/code/core/Mage/Core/Model/Config.php
<strong>dos2unix</strong> lib/Varien/File/Uploader.php lib/Varien/File/Uploader.php
提示:也许最后一行在终端中需要额外的return。
结论
这样你就可以避免在所有文件中使用 运行ning dos2unix,这对我来说似乎更安全。接下来,像 Magento 指令一样调用 sh PATCH----something--.sh
。
我在我的 Magento 仪表板 v.1.7.0.2 中看到最后一个 Critical Reminder
通知 (2 important security patches (SUPEE-5344 and SUPEE-1533)...)
因此,我在其他 Magento 中正确下载并安装了它们(例如 1.6.0
、1.6.1
),但我在这个版本中遇到了这些错误 1.7.0.2
[root@oc1 httpdocs]# sh PATCH_SUPEE-1533_EE_1.12.x_v1-2015-02-10-08-19-16.sh
Checking if patch can be applied/reverted successfully...
ERROR: Patch can't be applied/reverted successfully.
patching file app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php
Hunk #1 FAILED at 444.
1 out of 1 hunk FAILED -- saving rejects to file app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php.rej
patching file app/code/core/Mage/Adminhtml/controllers/DashboardController.php
Hunk #1 FAILED at 92.
1 out of 1 hunk FAILED -- saving rejects to file app/code/core/Mage/Adminhtml/controllers/DashboardController.php.rej
我正在搜索并找到了这个 Magento patch failing to install post,但它对我不起作用
我在 windows、Mac 和 Linux 上下载了 .sh 文件,结果是一样的...有什么想法吗?
我在本地机器上使用 Windows。服务器当然是Linux。我使用 Git 进行版本控制。
长话短说:尝试使用 dos2unix
实用程序来尝试获取 .php 文件的行结尾以匹配 .sh 补丁文件。 (我想你也可以 运行 .sh 文件上的 dos2unix 或 .sh 文件上的 unix2dos - 一些组合使它们相同)。
尽管我认为您的错误消息看起来与我的有些不同。事实上,你看过 'reject file' 了吗?如果这不是行尾故障,您能想到 1.6 和 1.7 安装之间有什么不同吗? (我已经使用此处描述的方法修补了 1.7.0.2 和 1.9.0.1)。如果您检查 Graph.php 文件,其中是否有任何编辑?
以下是对我有用的更多信息:
我使用了 Cygwin(Gitbash 似乎在 Linux 和 Windows 文件路径之间挣扎,并给出了错误 /app/etc must exist
)。此外,我还必须 运行 Cygwin 作为管理员来解决文件权限错误(这很奇怪,可能是我的设置所独有的)。
但我需要做的主要事情是 运行 dos2unix
补丁试图 diff
的文件。我通过编辑 .sh 补丁文件来完成此操作,您可以在文件末尾看到该文件具有将要更改的文件的路径。
所以我编辑了 .sh 文件,在第 66 行的评论之前添加了这两行 # 5. File pathes
:-
# extra steps for windows CRLF:
dos2unix app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php
dos2unix app/code/core/Mage/Adminhtml/controllers/DashboardController.php
您可能要考虑 B 计划并手动编辑文件;变化不大。
补丁 5344 确实还有一些变化。对于那个,我在文件 PATCH_SUPEE-5345_CE_1.7.0.2_v1-2015-02-10-08-11-22.sh
中的评论 # 5. File pathes
之前添加了这些行:-
# extra steps for windows CRLF:
dos2unix lib/Varien/Db/Adapter/Pdo/Mysql.php
dos2unix app/code/core/Mage/XmlConnect/Model/Observer.php
dos2unix app/code/core/Mage/Oauth/controllers/Adminhtml/Oauth/AuthorizeController.php
dos2unix app/code/core/Mage/Core/Controller/Request/Http.php
dos2unix app/code/core/Mage/Admin/Model/Observer.php
这对我有用。我阅读了一些 Stack Overflow 的答案来想出这个解决方案。 'patch' 命令似乎对行尾非常敏感。您可能会尝试的另一件事是将 -w 标志添加到 diff 命令中(再次通过编辑 .sh 文件),这可能会使 diff 在行的开头和结尾忽略白色 space 但它不适用于我。 http://unixhelp.ed.ac.uk/CGI/man-cgi?diff
作为最后的陷阱,我会注意到我需要通过重新 运行 将 Cygwin setup-x86.exe
'install or update' 程序添加到 Cygwin 来添加 patch
命令在包含 patch
.
如果在 Magento 中打补丁的文件的行尾与补丁文件本身不同,您会看到上面的 HUNK 错误。
例如:
- 正在修补的文件:Windows 行结尾
- 补丁文件:Unix 行结尾
如果是这种情况,您需要更改与所在系统不匹配的文件的行尾 运行。
即:
- 如果 运行ning on Linux,确保两者都有 Unix 行结尾。
- 如果在 Windows 上 运行ning,请确保两者都有 Windows 行结尾。
您可以在 Sublime 编辑器中轻松执行此操作:查看 > 行尾 >(选择正确的)
如果你运行正在 Linux 上安装并且正在修补的文件有 Windows 行结尾(我的行结尾出于某种原因显然 PHP 没有'不要介意),将补丁文件更改为也有 Windows 行结尾会导致此神秘错误:
$ sh PATCH_SUPEE-2629_EE_1.12.0.0_v1.sh
: command not found_1.12.0.0_v1.sh: line 7:
'ATCH_SUPEE-2629_EE_1.12.0.0_v1.sh: line 9: syntax error near unexpected token `{
'ATCH_SUPEE-2629_EE_1.12.0.0_v1.sh: line 9: `_check_installed_tools() {
有关详细信息,请参阅 Magento patch failing to install
我的解决方案也使用 dos2unix,但这对我有用:
第 1 步
在 linux 终端中我有 运行 cat PATCH------something---.sh | grep "diff "
,这导致补丁中涉及的所有文件。
提示:如果文件很多,请使用浏览器添加> diff_files.txt
和download/access。
第 2 步
将 diff 与文件路径 指令复制到 notepad++ (我假设您正在使用 Windows, 这就是行结尾发生的原因).
你会得到这样的东西:
<strong>差异 --git</strong> app/code/core/Mage/Adminhtml/Helper/Sales.php app/code/core/Mage/Adminhtml/Helper/Sales.php
<strong>差异 --git</strong> app/code/core/Mage/Core/Model/Config.php app/code/core/Mage/Core/Model/Config.php
<strong>diff --git</strong> lib/Varien/File/Uploader.php lib/Varien/File/Uploader.php
可以看到,文件路径重复了;没关系。
第 3 步
现在只需将 diff --git
替换为 dos2unix
,将结果复制到 ssh 终端,记住您需要在 Magento 中根文件夹。 dos2unix会调用同一个文件两次,但是没有问题。
<strong>dos2unix</strong> app/code/core/Mage/Adminhtml/Helper/Sales.php app/code/core/Mage/Adminhtml/Helper/Sales.php
<strong>dos2unix</strong> app/code/core/Mage/Core/Model/Config.php app/code/core/Mage/Core/Model/Config.php
<strong>dos2unix</strong> lib/Varien/File/Uploader.php lib/Varien/File/Uploader.php
提示:也许最后一行在终端中需要额外的return。
结论
这样你就可以避免在所有文件中使用 运行ning dos2unix,这对我来说似乎更安全。接下来,像 Magento 指令一样调用 sh PATCH----something--.sh
。