Невозможно применить унифицированное исправление diff на Solaris - PullRequest
5 голосов
/ 13 августа 2010

Например, если у меня есть два файла:

file1:

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 -u -i files.patch

, он зависает:

 Looks like a unified context diff.
File to patch:

1.Есть ли способ использовать встроенную команду исправления Solaris с унифицированными разностями?

2.Какой формат diff считается наиболее переносимым, если невозможно применить унифицированный формат?

Обновление: Я нашел ответ на первую часть моего вопроса.Кажется, что patch в Solaris зависает, если второй файл (в данном случае file2) находится в той же папке, что и первый (file1).Например, следующий довольно распространенный diff:

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

, пока следующий diff ( note, второй файл переименован ):

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

будет отлично работать.

В отношении второй части моего вопроса см. Принятый ответ ниже.

Ответы [ 3 ]

6 голосов
/ 13 августа 2010

На Solaris /usr/bin/patch - старая версия, необходимая для соответствия некоторым древним стандартам. Современная версия исправления GNU предоставляется как /usr/bin/gpatch в Solaris 8 и более поздних версиях.

2 голосов
/ 02 марта 2012
diff -cr old.new new.txt > patch.txt

gpatch -p0 < patch.txt

У меня отлично работает (с помощью gpatch)

0 голосов
/ 13 августа 2010

Single Unix v2 и v3 поддерживают контекстные различия, но не унифицированные, поэтому для лучшей переносимости следует использовать контекстные различия (опция -c для diff и patch).

В старых выпусках Solaris (я думаю, до 10) вам нужно убедиться, что /usr/xpg4/bin до /usr/bin в вашем $PATH, в противном случае вы можете получить версии совместимости некоторых утилит вместо стандартных.

...