【发布时间】:2016-02-12 00:58:19
【问题描述】:
我从 Git 中查看了最新的 OpenSSL:
git clone git://git.openssl.org/openssl.git
其中一位开发者给我发了一个 AARCH64 的补丁来测试:
$ cat RT4237.diff
diff --git a/crypto/ec/asm/ecp_nistz256-armv8.pl b/crypto/ec/asm/ecp_nistz256-armv8.pl
index 9d1bce1..ce6b69e 100644
--- a/crypto/ec/asm/ecp_nistz256-armv8.pl
+++ b/crypto/ec/asm/ecp_nistz256-armv8.pl
@@ -1289,6 +1289,9 @@ $code.=<<___;
stp $acc0,$acc1,[$rp_real,#$i]
stp $acc2,$acc3,[$rp_real,#$i+16]
___
+$code.=<<___ if ($i == 0);
+ adr $bp_real,.Lone_mont-64
+___
}
$code.=<<___;
ldp $acc0,$acc1,[$ap_real,#$i] // in1
补丁不适用于 Git。我不会分享 Git 的失败,所以人们不会因为解决 Git 问题而分心。相反,我只是想使用一个真正有效的工具。
我尝试使用 Apply Patch File to a Source Code Tree (patch -p3 < RT4237.diff),但由于 Git 序言导致错误:
$ cd openssl
$ patch -p3 < RT4237.diff
(Stripping trailing CRs from patch; use --binary to disable.)
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/crypto/ec/asm/ecp_nistz256-armv8.pl b/crypto/ec/asm/ecp_nistz256-armv8.pl
|index 9d1bce1..ce6b69e 100644
|--- a/crypto/ec/asm/ecp_nistz256-armv8.pl
|+++ b/crypto/ec/asm/ecp_nistz256-armv8.pl
--------------------------
如何在不使用 Git 的情况下应用补丁?
hikey:openssl$ pwd
/home/jwalton/openssl
hikey:openssl$ find . -name RT4237.diff
./RT4237.diff
hikey:openssl$ find . -name ecp_nistz256-armv8.pl
./crypto/ec/asm/ecp_nistz256-armv8.pl
【问题讨论】:
-
什么错误确切地?如果您检查了 correct 分支,并且 diff 对其有效,它应该 工作 [假设
-p级别是正确的] 或给你一个列表它不能适用的帅哥。另外,“git序言”是什么意思?你的意思是第 1 行(即“差异”,因为补丁跳过它应该无关紧要)。或者,只需从 blah.diff 中删除第一行 -
@CraigEstey - “究竟是什么错误?” - 已添加错误消息。 “另外,“git preamble”是什么意思” - 序言是
diff --git ...。它显示在我收到的补丁的第一行。 -
根据 Craig 关于 -p 的观点,patch 关于找不到要修补的文件的抱怨让我认为您的 cwd 与 -p3 不一致
-
你能显示
find . -name ecp_nistz256-armv8.pl吗? -
谢谢@Notlikethat。我花了大约 45 分钟试图让它发挥作用。在一个简单的任务上浪费了这么多时间之后,我决定转向一个在实践中有效的工具。