我创建了一个 SVN 补丁,用于从 Linux 服务器移植到 AIX 服务器。
SVN生成的补丁如下:
Index: cas/cm/cmsee.c
===================================================================
--- cas/cm/cmsee.c (revision 19)
+++ cas/cm/cmsee.c (working copy)
@@ -769,14 +769,23 @@
CE_CEXPFCT CE_VOID cm_seet(CE_VOID)
{
+#ifndef TRACE
+ TT_OWNTYPE *phh;
+ TT_OWNTYPE *phhe;
+#elif FINAL_CHECKS
TT_OWNTYPE *phh;
TT_OWNTYPE *phhe;
+#endif
TRACE(I,"cm_seet");
+#ifndef TRACE
phh = cm_fp->fp_hh_ptr;
phhe = phh + cm_fp->cp_hh_cnt;
-
+#elif FINAL_CHECKS
+ phh = bm_fp->fp_hh_ptr;
+ phhe = pht + bm_fp->fp_hh_cnt;
+#endif
TRACE(I, fstr("init: phh %x phhe %x\n", phh, phhe););
#ifdef FINAL_CHECKS
当我运行命令时
patch -p0 -i Modified.patch
我收到以下错误:
Hmm... Looks like a unified context diff to me...
The text leading up to this was:
--------------------------
|Index: cas/cm/cmsee.c
|===================================================================
|--- cas/cm/cmsee.c (revision 19)
|+++ cas/cm/cmsee.c (working copy)
--------------------------
Patching file cas/cm/cmsee.c using Plan A...
Malformed patch at line 7: CE_CEXPFCT CE_VOID cm_seet(CE_VOID)
我尝试了 Google 并检查了 StackExchange,但没有解决方案可以解决我的问题。有人能帮我一下吗?
答案1
您遇到的问题是 AIX 实现中的错误patch
。具体来说,至少某些版本的 AIX 实现patch
期望统一上下文差异文件采用由 AIX 实用程序(至少某些版本)生成的错误形式diff
。所述错误形式不符合 POSIX 并且在上下文的每一行以及每个添加或删除的行的第二列中包含空格。
要对受影响的 AIX 实用程序版本使用统一的上下文差异(采用 POSIX 描述的形式)patch
,需要在表示上下文、添加或删除的每行的第二列中插入一个空格。
对于Modified.patch
您描述的文件,可以使用以下命令生成调整后的补丁文件:
( head -n 4 Modified.patch; tail -n +5 Modified.patch |
sed 's/^$/ /; s/^\([ +-]\)/\1 /;' ) > Adjusted.patch