例如,如果我有两个文件:
文件1:
This is file 1
和file2:
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
然后,如果我尝试在Solaris上使用patch命令应用此补丁:
patch -u -i files.patch
它挂起:
Looks like a unified context diff.
File to patch:
1。有没有办法将Solaris 本机补丁命令与统一差异一起使用?
2。如果无法应用统一格式,哪种差异格式被认为是最便携的?
更新
我在问题的第一部分找到了答案。如果第二个文件(在本例中为file2)与第一个文件(file1)存在于同一文件夹中,则Solaris上的patch
似乎挂起。例如,以下非常常见的差异:
--- 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
将完美运作。
关于我的问题的第二部分,请参阅下面接受的答案。
答案 0 :(得分:6)
在Solaris上/usr/bin/patch
是符合某些古老标准所需的旧版本。
在Solaris 8及更高版本中,/usr/bin/gpatch
提供了现代版本的GNU补丁。
答案 1 :(得分:2)
diff -cr old.new new.txt > patch.txt
gpatch -p0 < patch.txt
完美适合我(使用gpatch)
答案 2 :(得分:0)
单个Unix v2和v3都支持上下文差异但不支持统一差异,因此为了更好的可移植性,您应该使用上下文差异(-c
选项diff
和patch
)。
在较旧的Solaris发行版(我认为10之前)中,您需要确保/usr/xpg4/bin
中的/usr/bin
位于$PATH
之前,否则您可能会获得某些版本的兼容性版本实用程序而不是标准实用程序。