5

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

文件1:

This is file 1

和文件2:

This is file 2

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

diff -u file1 file2 > files.patch

结果是:

--- 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

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

patch -u -i files.patch

它挂在:

 Looks like a unified context diff.
File to patch:

1. 有没有办法使用具有统一差异的 Solaris原生补丁命令?

2. 如果无法应用统一格式,哪种 diff 格式被认为是最可移植的?

更新: 我在问题的第一部分找到了答案。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

不适用于非常常见的补丁命令:

patch -p1 -u -d a < file.patch

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

--- 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

将完美地工作。

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

4

3 回答 3

6

在 Solaris/usr/bin/patch上是一个旧版本,需要遵守一些古老的标准。/usr/bin/gpatch在 Solaris 8 及更高版本中提供了现代版本的 GNU 补丁。

于 2010-08-13T15:36:04.280 回答
2
diff -cr old.new new.txt > patch.txt

gpatch -p0 < patch.txt

非常适合我(使用 gpatch)

于 2012-03-02T18:12:27.783 回答
1

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

/usr/xpg4/bin在较旧的 Solaris 版本(我认为是 10 之前的版本)上,您需要确保/usr/bin在您$PATH的 .

于 2010-08-13T18:54:27.150 回答