2010-08-13 14 views
5

पर एकीकृत diff पैच लागू नहीं कर सकते हैं उदाहरण के लिए, अगर मैं दो फ़ाइलें:सोलारिस

file1:

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

उस पर लटकी हुई है:

Looks like a unified context diff. 
File to patch: 

1. वहाँ सोलारिस उपयोग करने के लिए एक रास्ता है एकीकृत पैच कमांड के साथ देशी पैच कमांड?

2. एकीकृत प्रारूप लागू करने के लिए कौन सा अंतर प्रारूप सबसे पोर्टेबल माना जाता है?

अद्यतन: मैं अपने प्रश्न के पहले भाग पर जवाब मिल गया है। ऐसा लगता है कि सोलारिस पर patch लटकता है यदि दूसरी फ़ाइल (इस मामले में फ़ाइल 2) पहले फ़ोल्डर (फ़ाइल 1) के समान फ़ोल्डर में मौजूद है। उदाहरण के लिए, निम्नलिखित बहुत आम 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 (टिप्पणी दूसरी फ़ाइल का नाम बदले जाने):

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

एकल यूनिक्स v2 और v3 दोनों समर्थन संदर्भ diffs लेकिन एकीकृत diffs नहीं हैं, इसलिए बेहतर पोर्टेबिलिटी के लिए आपको संदर्भ diffs (-c विकल्प diff और patch) का उपयोग करना चाहिए।

बड़े सोलारिस रिलीज पर (पूर्व 10, मुझे लगता है), तो आप अन्यथा आप मानक वाले के बजाय कुछ उपयोगिताओं की अनुकूलता संस्करण प्राप्त कर सकते हैं सुनिश्चित करें कि /usr/xpg4/bin अपने $PATH में /usr/bin से पहले है बनाने की जरूरत है,।

+1

स्पष्टीकरण के लिए गिल्स धन्यवाद। मैं संदर्भ diffs का उपयोग करने पर विचार करेंगे। जहां तक ​​मैं समझता हूं, आप बदलने के लिए स्रोत फ़ाइल के बारे में संदर्भ diff पैच जानकारी में लिख नहीं सकते हैं। क्या मैं सही हू? यह बहुत सुविधाजनक नहीं है ... वैसे भी, मैं अभी भी समझ नहीं पा रहा हूं कि मैं diff -u द्वारा उत्पादित diff के साथ पैच -u चलाने में विफल क्यों रहा। – Shcheklein

+0

@Shcheklein: "स्रोत फ़ाइल बदलने के बारे में पैच जानकारी" से आपका क्या मतलब है? संदर्भ diffs फ़ाइल नाम शामिल हैं। POSIX को 'diff-cr' समर्थित होने की आवश्यकता है, इसलिए इसे काम करना होगा। वैसे, क्या 'पैच -00' एक फर्क पड़ता है? – Gilles

+0

हां, संदर्भ diffs में पर्याप्त जानकारी शामिल है। हालांकि, सोलारिस के 'पैच' के साथ समस्या अलग थी (प्रश्न का अद्यतन देखें)। '-p0' कोई फर्क नहीं पड़ता है। ऐसा लगता है कि सोलारिस पर 'पैच' पसंद नहीं करता है जब दोनों नाम हंक में समान होते हैं या दोनों फाइलें मौजूद होती हैं। – Shcheklein

6

सोलारिस /usr/bin/patch पर कुछ पुराने मानकों का अनुपालन करने के लिए आवश्यक एक पुराना संस्करण है। जीएनयू पैच का एक आधुनिक संस्करण सोलारिस 8 और बाद में /usr/bin/gpatch के रूप में प्रदान किया जाता है।

+0

मुझे पता है। यह संभव है कि gpatch डिफ़ॉल्ट रूप से स्थापित नहीं है और यह बहुत अच्छा नहीं है जब आपके उत्पाद का संकलन विफल हो गया क्योंकि कोई gpatch नहीं है। – Shcheklein

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

gpatch -p0 < patch.txt 

मेरे लिए पूरी तरह से काम करता है (gpatch का प्रयोग करके)

संबंधित मुद्दे