2011-01-14 5 views
8

मैं इस तरह एक patchfile है:एक पैच-फ़ाइल को एक एसवीएन कार्यशील प्रतिलिपि पर क्यों खारिज कर रहा है?

$ svn copy -r 178 trunk/component/dir branches/mybranch 

तब मैं

$ cd branches/mybranch 
$ ls -R 
./dir: 
file.xml 
$ patch -p0 -i ~/patchfile.patch 

लेकिन SVN के उत्पादन की कोशिश की:

Index: dir/file.xml 
=================================================================== 
--- dir/file.xml (revision 178) 
+++ dir/file.xml (working copy) 
@@ -7,7 +7,7 @@ 
    <markup> 
- <markup /> 
+ <markup></markup> 
    <markup> 
    <markup> 
@@ -20,6 +20,7 @@ 
    <markup> 
    <markup> 
+ <tag> 
    <markup> 

SVN काम कर प्रतिलिपि करने के लिए इसे लागू करने के लिए, मैं इसे का उपयोग कर branched

(Stripping trailing CRs from patch.) 
patching file dir/file.xml 
Hunk #1 FAILED at 7. 
Hunk #2 FAILED at 20. 
2 out of 2 hunks FAILED -- saving rejects to file dir/file.xml.rej 
प्रत्येक फ़ाइल के लिए

?

एसवीएन पैच को अस्वीकार करने का कारण क्या हो सकता है? मैं यूनिक्स मशीन पर हूं लेकिन पैच और रिपोजिटरी में विंडोज लाइन-एंडिंग है ...

मदद के लिए धन्यवाद!

उत्तर

7

dos2unix टिप खराब नहीं था लेकिन सुझाए गए समस्या को हल नहीं किया।

क्या मैं वास्तव में सभी फाइलों को पैच करने के लिए किया था:

$ cd branches/mybranch 
$ sudo apt-get install tofrodos 
$ fromdos ~/patchfile.patch 
$ fromdos */* 
$ patch -p0 -i ~/patchfile.patch 
$ todos */* 

तो मूल रूप से patch यूनिक्स के तहत CR/LF लाइनों से निपटने एक समस्या है लगता है। इसे LF में कनवर्ट करना, फिर पैचिंग और पैचिंग के बाद इसे वापस परिवर्तित करना।

स्टीफन के लिए क्रेडिट।

+0

यह भी मेरी समस्या हल, धन्यवाद।दरअसल ऐसा लगता है कि पैच सीआरएलएफ को अच्छी तरह से संभाल नहीं लेता है, भले ही पैच और टू-पेच दोनों फाइलें हों। –

+0

पैच ने सीआरएलएफ के साथ मेरे लिए ठीक काम किया, अगर दोनों पैच फ़ाइल और टू-बी-पैच वाली फाइलें एक ही पंक्ति समाप्ति का पालन करती हैं (यानी सीआरएलएफ/एलएफ) –

1

आप पैच फ़ाइल पर dos2unix उपकरण आज़मा सकते हैं। वह रेखा अंतराल को परिवर्तित करेगा।

+1

ऐसा किया। अब यह नहीं कहता है "(पैच से पिछली सीआरएस स्ट्रिपिंग।)" अब और। त्रुटियां अभी भी मौजूद हैं। – Simon

+0

@Stefan dos2unix पैचिंग ठीक बनाता है। लेकिन परिणाम में कोई लाइन ब्रेक नहीं है। पूर्व में मेरे मामले में, फ़ाइल में शामिल हैं: catdogcow – onmyway133

+0

यह पैच फ़ाइल नहीं है जहां यह एक समस्या है, यह स्रोत फ़ाइलें –

-1

संपादित: इसलिए हमने स्थापित किया कि patch एक एसवीएन उपकरण नहीं है। एसवीएन का इस पर कोई प्रत्यक्ष प्रभाव नहीं पड़ता है, जब तक कि यह पैच फ़ाइल को गलत तरीके से नहीं बनाया जाता।

क्या आप वाकई ट्रंक से पैचफाइल बनाया गया था? यदि ऐसा है, तो आपकी प्रति उस पैच के आधार पर समान होनी चाहिए, इसलिए विफल होने का कोई कारण नहीं होना चाहिए। एकमात्र निष्कर्ष मैं सोच सकता हूं कि पैच फ़ाइल में कुछ गड़बड़ है; यह आपकी फाइल से मेल नहीं खाता है।

की पुष्टि अपने काम के पिछले भाग में कि dir/file.xml वास्तव में लाइन 7. (मैं अपने प्रश्न में कोड संभालने कर रहा हूँ पर शुरू

<markup> 
    <markup /> 
    <markup> 
    <markup> 

शामिल सिर्फ एक संपादित प्रतिलिपि वैसे भी है, क्योंकि वहाँ होना चाहिए वहाँ 7 लाइनें, नहीं 4.) यानी, फ़ाइल की सामग्री पैच की सामग्री से मेल खाता है? रिक्ति और रेखा के अंत में विशेष ध्यान दें। यदि ऐसा होता है, तो कोई कारण नहीं होना चाहिए कि पैच उस हंक में विफल क्यों होगा।

+0

धन्यवाद, ज़ैक। लेकिन मुझे पता है कि पैच विचलन का हिस्सा नहीं है। कुछ प्रयासों के बाद भी मैं इस फ़ोल्डर प्रश्न में आया। मुझे कहना चाहिए था कि वास्तव में मेरी शाखा में 'डीआईआर' है। 'पैच -पी [एन]' की कोशिश करने से 'फ़ाइल नहीं मिली' या इसी तरह की त्रुटि आई है। मेरे संपादन पर एक नज़र डालें। धन्यवाद! – Simon