2010-07-02 6 views
9

विंडोज़ पर मैंने एक बहु-फ़ाइल डिफ बनाया है:लिनक्स पर विंडोज एसवीएन द्वारा किए गए डिफ को कैसे लागू करें?

svn diff > mydiff.diff 

फिर इसे लिनक्स मशीन पर ले जाया गया (उसी रेपो के उसी संस्करण के साथ, कोई बदलाव नहीं)। मैं इसे कैसे लागू करूं? Xzx54

 patch -p0 < mydiff.diff 

निष्पादित करने के बाद मुझे निम्न आउटपुट मिलता है:

patching file licstat/test/unittest/test_licstatactioncontainers.cpp 
File licstat/test/unittest/test_licstatactioncontainers.cpp is not empty after patch, as expected 
patching file licstat/test/unittest/test_licstatactions.cpp 
Hunk #1 FAILED at 99. 
1 out of 1 hunk FAILED -- saving rejects to file licstat/test/unittest/test_licstatactions.cpp.rej 
can't find file to patch at input line 295 
Perhaps you used the wrong -p or --strip option? 
The text leading up to this was: 
-------------------------- 
|Index: licstat/test/unittest/test_licenseserverusagemap.cpp 
|=================================================================== 
|--- licstat/test/unittest/test_licenseserverusagemap.cpp  (revision 6767) 
|+++ licstat/test/unittest/test_licenseserverusagemap.cpp  (working copy) 
-------------------------- 
File to patch: 

और अंतिम पंक्ति मेरी क्रिया के लिए तत्काल प्रतीक्षा कर रही है।

इसे काम करने के लिए पैच को कैसे बना/लागू करना चाहिए?

(संपादित करें) अब मैं देखता हूं कि फ़ाइल गुम थी और diff ने इसे नहीं बनाया था। फ़ाइल को मैन्युअल रूप से बनाने के बाद मुझे इस तरह की त्रुटियां मिलती हैं:

patching file licstat/misc/generic/mysql/stored_procedures.sql 
Hunk #1 FAILED at 220. 
Hunk #2 FAILED at 245. 
Hunk #3 FAILED at 622. 
Hunk #4 FAILED at 661. 
Hunk #5 FAILED at 810. 
Hunk #6 FAILED at 822. 
Hunk #7 FAILED at 868. 
Hunk #8 FAILED at 999. 
8 out of 8 hunks FAILED -- saving rejects to file licstat/misc/generic/mysql/stored_procedures.sql.rej 

उत्तर

0

त्रुटि उस प्रकार हो सकता है जब स्थानीय फ़ाइल स्वरूप वामो के बजाय CRLF है जब आप एक यूनिक्स प्रणाली पर हैं।

पैच यूनिक्स फ़ाइल प्रारूप में svn diff पैच को अनुकूलित करने का प्रयास करता है लेकिन स्थानीय फाइलें डॉस मोड में होती हैं, जो तब हो सकती है जब आप डॉस और यूनिक्स वातावरण के बीच कोड बेस साझा करते हैं।

grep ^+++ patchfile.patch | awk '{print $2}' | dos2unix 

और फिर पैच लागू करने:

patch -p0 < patchfile.patch 
0

मैं काफी नियमित रूप से के बीच फ़ाइलें पैच

मेरे लिए क्या काम करता है पहला उदाहरण के लिए, सभी फाइलों को परिवर्तित करने के लिए के बारे में प्रभावित किया जा रहा है एक विंडोज़ और मैक सिस्टम और patch न्यूलाइन के साथ सही तरीके से निपटने लगते हैं, इसलिए मुझे नहीं लगता कि यह समस्या है। ऐसा लगता है कि आपने test_licstatactioncontainers.cpp हटा दिया है और पहली चेतावनी इसके बारे में है। दूसरा फ़ाइल को खोजने के बारे में शिकायत नहीं कर रहा है।

क्या यह एक फ़ाइल नाम केस मुद्दा हो सकता है? विंडोज फ़ाइल नाम के लिए असंवेदनशील है, लेकिन लिनक्स नहीं है। फ़ाइल वास्तव में linux perchance पर test_LicenceServerUsageMap.cpp कहा जाता है? या निर्देशिका LicStat/टेस्ट निर्देशिका?

+0

हाँ, मैं फ़ाइल (SVN के साथ) निकाल दिया गया है, तो यह ठीक होना चाहिए। नहीं, सभी निर्देशिका/फ़ाइल नाम कम-मामले हैं। – ssobczak

0

dos2unix कमांड का उपयोग करके पैच फ़ाइल में पैच फ़ाइल में लाइन एंडिंग को कनवर्ट करने का प्रयास करें।

+0

यह अंतर्निहित फ़ाइल मिश्रित लाइन समाप्ति होने पर काम नहीं करता है। – dshin

7

"dos2unix" का उपयोग करने से आपकी मदद नहीं होगी यदि आपके पास लिनक्स पर आपकी फ़ाइलों में सीआर + एलएफ लाइन फीड है।

यह कमांड लाइन के किसी भी संयोजन के साथ काम करना चाहिए फ़ीड:

patch -p0 -l --binary < patch.diff