سؤال

على سبيل المثال ، إذا كان لدي ملفان:

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 باستخدام Catch Command:

patch -u -i files.patch

معلقة على:

 Looks like a unified context diff.
File to patch:

1. هل هناك طريقة لاستخدام سولاريس أمر التصحيح الأصلي مع فرق موحدة؟

2. ما هو تنسيق Diff الذي يعتبر أكثر قابلية للحمل إذا لم يكن من الممكن تطبيق تنسيق موحد؟

تحديث:لقد وجدت إجابة في الجزء الأول من سؤالي. يبدو ان patch على Solaris Hangs إذا كان الملف الثاني (File2 في هذه الحالة) موجودًا في نفس المجلد مثل المجلد الأول (File1). على سبيل المثال ، ما يلي الفرق الشائع جدًا:

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

سوف تعمل تماما.

بالنسبة للجزء الثاني من سؤالي ، انظر الإجابة المقبولة أدناه.

هل كانت مفيدة؟

المحلول

Single Unix V2 و V3 كلا من اختلاف سياق الدعم ولكن ليسوا اختلافًا موحدًا ، لذلك لتحسين قابلية النقل ، يجب عليك استخدام فرق السياق (-c خيار ل diff و patch).

في إصدارات Solaris القديمة (ما قبل 10 ، أعتقد) ، تحتاج إلى التأكد من ذلك /usr/xpg4/bin هو من قبل /usr/bin في الخاص بك $PATH, ، وإلا فقد تحصل على إصدارات توافق لبعض المرافق بدلاً من تلك القياسية.

نصائح أخرى

على سولاريس /usr/bin/patch هو إصدار قديم مطلوب للامتثال لبعض المعايير القديمة. يتم توفير نسخة حديثة من GNU Patch كـ /usr/bin/gpatch على سولاريس 8 ثم في وقت لاحق.

diff -cr old.new new.txt > patch.txt

gpatch -p0 < patch.txt

يعمل بشكل مثالي بالنسبة لي (باستخدام GPatch)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top