无法在Solaris上应用统一的diff补丁

Shc*_*ein 5 diff patch solaris unified-diff

例如,如果我有两个文件:

文件1:

This is file 1
Run Code Online (Sandbox Code Playgroud)

和file2:

This is file 2
Run Code Online (Sandbox Code Playgroud)

并使用以下命令创建补丁:

diff -u file1 file2 > files.patch
Run Code Online (Sandbox Code Playgroud)

结果是:

--- file1       Fri Aug 13 17:53:28 2010
+++ file2       Fri Aug 13 17:53:38 2010
@@ -1,1 +1,1 @@
-This is file 1
+This is file 2
Run Code Online (Sandbox Code Playgroud)

然后,如果我尝试在Solaris上使用patch命令应用此补丁:

patch -u -i files.patch
Run Code Online (Sandbox Code Playgroud)

它挂在:

 Looks like a unified context diff.
File to patch:
Run Code Online (Sandbox Code Playgroud)

1.有没有办法将Solaris 本机补丁命令与统一差异一起使用?

2.如果无法应用统一格式,哪种差异格式被认为是最便携的?

更新: 我在问题的第一部分找到了答案.patch如果第二个文件(在这种情况下为file2)与第一个文件(file1)存在于同一文件夹中,那么Solaris上似乎会挂起.例如,以下相当常见的差异:

--- a/src/file.src       Sat Aug 14 23:07:29 2010
+++ b/src/file.src       Sat Aug 14 23:07:37 2010
@@ -1,2 +1,1 @@
-1
-
+2
Run Code Online (Sandbox Code Playgroud)

不适用于相当普通的patch命令:

patch -p1 -u -d a < file.patch
Run Code Online (Sandbox Code Playgroud)

而以下差异(注意重命名第二个文件):

--- a/src/file.src       Sat Aug 14 23:07:29 2010
+++ b/src/file_new.src       Sat Aug 14 23:07:37 2010
@@ -1,2 +1,1 @@
-1
-
+2
Run Code Online (Sandbox Code Playgroud)

会很完美.

对于我的问题的第二部分,请参阅下面接受的答案.

ala*_*anc 6

在Solaris上/usr/bin/patch是符合某些古老标准所需的旧版本./usr/bin/gpatchSolaris 8及更高版本提供了现代版本的GNU补丁.


Gil*_*il' 1

Single Unix v2 和 v3 都支持上下文差异,但不支持统一差异,因此为了更好的可移植性,您应该使用上下文差异(和-c选项)。diffpatch

在较旧的 Solaris 版本(我认为是 10 之前的版本)上,您需要确保 位于之前/usr/xpg4/bin,否则您可能会获得某些实用程序的兼容版本而不是标准版本。/usr/bin$PATH