2011-09-01 9 views
5
  1. मैंने svn remove का उपयोग करके कुछ टेक्स्ट फ़ाइलों को हटा दिया है। लेकिन svn diff फ़ाइल में सभी सामग्री को हटाने के रूप में दिखाता है। उस diff के पैच को लागू करने से केवल सामग्री को संशोधित किया जाता है, फ़ाइल को नहीं हटाता है।svn हटाने और svn नाम बदलने के बाद एक लागू पैच प्राप्त करें

  2. मैंने एक निर्देशिका का नाम बदल दिया जिसमें svn rename का उपयोग कर बाइनरी फाइलें शामिल हैं। एक सामान्य svn diff से पैच फ़ाइल कुछ भी नहीं करता है।

How to make svn diff produce file that patch would apply, when svn cp or svn mv was used?

subversion diff including new files

दोनों ही तरीकों से ऊपर दिए गए लिंक में केवल फाइलों में किए गए संशोधन करता है। पैच लगाने के बाद उन्हें हटाया/बदला नहीं जाता है। क्या उपर्युक्त परिवर्तनों के लिए एक कार्यशील पैच प्राप्त करना संभव है?

+0

क्या आपने उस सामग्री को चेक-इन किया था जिस पर आपने पैच लगाया था? – JVerstry

+0

@JVerstry मैं आपके प्रश्न को काफी समझ नहीं पा रहा हूं। मैंने svn repo की एक अलग प्रतिलिपि की जांच की और यह जांचने के लिए पैच लगाने की कोशिश की कि यह काम करता है या नहीं। – Nufail

+0

जब आप पैच लागू करते हैं, तो जानकारी केवल छिपी हुई .svn फ़ाइलों में पंजीकृत होती है। हालांकि, इस svn repo की विभिन्न प्रतिलिपि में चेक-इन करने के बाद, केवल एक फ़ाइल हटा दी जाएगी। – JVerstry

उत्तर

5
patch आदमी पृष्ठ से

:

-E या --remove-खाली फ़ाइलों उत्पादन फ़ाइलों को खाली करने के बाद पैच लागू किया गया है कर रहे हैं निकालें। आम तौर पर यह विकल्प अनावश्यक है, क्योंकि पैच हेडर पर टाइम स्टैम्प की जांच कर सकता है- मेरा खनन पैचिंग के बाद मौजूद होना चाहिए या नहीं। हालांकि, यदि इनपुट संदर्भ भिन्न नहीं है या पैच अनुरूप है- POSIX में आईएनजी, पैच खाली पैच की गई फ़ाइलों को नहीं हटाता है जब तक यह विकल्प नहीं दिया जाता है। जब पैच फ़ाइल को हटा देता है, तो यह भी किसी भी खाली पूर्वजों निर्देशिका को हटाने का प्रयास करता है।

1

इस प्रयास करें:

patch -p0 -E < 1.patch && svn rm `svn st -q | grep ^! | cut -c 9-` 
+0

धन्यवाद। यह कामकाज पहली समस्या को हल करता है। – Nufail

1

मुझे लगता है कि ओपी का दूसरा मुद्दा एक SVN बग कि SVN 1.7 में तय किया गया था के कारण होता है। आप एक निर्देशिका संरचना (स्थानांतरित करें, नाम बदलें, हटाएं) को बदलें और इसे प्रतिबद्ध करें, लेकिन svn diff का उपयोग करते समय, पैच "कुछ भी नहीं" लगता है।

निर्देशिकाओं को हटाने के दौरान मुझे यह समस्या थी और लक्षण समान हैं इसलिए मुझे लगता है कि हम एक ही "रूट बग" का अनुभव कर रहे हैं। मेरे लिए, svn 1.7 को अद्यतन करने से इसे हल किया गया, क्योंकि svn 1.7 diffs (पैच) को अलग-अलग उत्पन्न करता है।

svn diff के कुछ संस्करण diff में स्थानांतरित/पुनर्नामित/हटाए गए फ़ाइलों को नहीं डालते हैं!

देखें: http://svn.haxx.se/dev/archive-2004-03/0333.shtml। एसवीएन डीवी सूची से यह संग्रहीत ईमेल दिखाता है कि देवताओं ने खुद को इस समस्या की पहचान की, एक दशक पहले 1.0.1 जारी होने से कुछ समय पहले। यदि आप धागे का पालन करते हैं, तो वे इसे ठीक करने के लिए काफी दृढ़ लगते थे, लेकिन 1.6 भी diff से सामान छोड़ रहा था। मुझे 1.7 पर अपडेट करना पड़ा।

मूल रूप से, अगर SVN < 1.7 पाया है कि एक निर्देशिका था svn delete 'घ, यह recurse और बच्चों को संसाधित नहीं होता, यह सिर्फ वहाँ बंद कर देंगे और न diff में है कि पेड़ के नीचे कुछ भी डाल दिया। यह वही नहीं है जो हम चाहते हैं, हम सभी बच्चों के लिए स्पष्ट रूप से हटाना चाहते हैं, ताकि दूसरे उत्तर में वर्णित पैच, खाली फ़ाइलों और निर्देशिकाओं को -E के माध्यम से हटा सके। यदि पैच पैच में नहीं है तो पैच कुछ भी नहीं कर सकता है।

svn 1 का उपयोग करना।7 मैंने एक समान अंतर किया जैसा मैंने पहले किया था लेकिन हटाए गए निर्देशिका के तहत प्रत्येक फ़ाइल स्पष्ट रूप से पैच में थी क्योंकि सभी लाइनें हटा दी गई थीं (खाली हो रही थी), और फिर patch/quilt ने फ़ाइलों और फ़ोल्डर्स को सफलतापूर्वक हटा दिया। मुझे लगता है कि चलने या नाम बदलने के साथ आपके मामले में कुछ समान होने की जरूरत है।

गोचस: 1.7 तक अपग्रेड करने से आपकी कार्यशील प्रतियां बेकार हो जाएंगी। सुनिश्चित करें कि आप अपडेट करने से पहले अपने बदलाव करते हैं। फिर आपको सब कुछ फिर से जांचना होगा। संपादित करें: एसवीएन 1.7 क्लाइंट मरम्मत करने में सक्षम हो सकता है लेकिन यदि यह आपको फिर से चेकआउट करने की आवश्यकता नहीं हो सकती है। बस जागरूक रहें ताकि आप काम न खोएं।