لا يمكن تطبيق تصحيح Diff الموحد على Solaris
-
28-09-2019 - |
سؤال
على سبيل المثال ، إذا كان لدي ملفان:
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)