मेरे SVN रिपॉजिटरी से संशोधन हटाना चाहते हैं


33

मेरे कोड रेपो में नवीनतम संशोधन दूषित हो गए हैं और मेरे ऐप को अस्थिर कर दिया है। मैं पहले के संशोधन को वापस लेना चाहता हूं।

लेकिन मैं अपनी कार्यशील कॉपी पर केवल 'रिवर्ट' का उपयोग नहीं करना चाहता; मैं वास्तव में अपने रेपो से पहले अपने हेड रिवीजन और कई संशोधनों को हटाना चाहता हूं, जिससे मेरे रेपो को पहले के संशोधन में बदल दिया जाए, जो हेड रिवीजन बन जाएगा। किसी को पता है कि मैं यह कैसे करूँगा?


1
आप वास्तव में पुराने संशोधनों को नहीं हटा सकते, आप बस इतना कर सकते हैं कि बदलावों को उल्टा कर दें, और जैसा कि फेलिक्स ने उल्लेख किया है। दिलचस्प सनद, Git (और साथ ही अन्य संस्करण नियंत्रण समाधान) वास्तव में आपको वास्तव में संशोधन हटाने की अनुमति देता है ..
davr

3
हाँ, आप कर सकते हैं, आपको सिर्फ svnadmin के साथ SVN रिपॉजिटरी तक पहुँच की आवश्यकता है। मेरा जवाब नीचे देखें।
मार्टीन

davr तकनीकी रूप से सही है। आप जो वर्णन करते हैं, वह बुरे लोगों को छोड़कर सभी संशोधनों को डंप कर रहा है, फिर इसे पुराने रेपो के ऊपर डंप कर रहा है। मेरे दिमाग में वास्तव में 'संशोधन' को हटाने जैसी बात नहीं है।
साइरेक्स

जवाबों:


12

शायद यह लिंक आपकी मदद करे:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

उद्धरण:

  1. अपनी कार्य प्रतिलिपि के भीतर शीर्ष निर्देशिका में बदलें (यह मानते हुए कि आप पूरी कामकाजी प्रति वापस लेना चाहते हैं)।

  2. svn revertअपनी कार्यशील प्रतिलिपि की फ़ाइलों को उस स्थिति में वापस लाने के लिए चलाएं जब वे अंतिम बार प्रतिबद्ध / चेक आउट किए गए थे।

  3. चलाने svn status -vको देखने के लिए जो संशोधन संख्या अपने काम अब कॉपी करने के लिए मेल खाती है (यह सूची है कि में सबसे ज्यादा संशोधन संख्या है svn status -vपैदा करता है)।

  4. वह नंबर चलाएं, svn merge -rXX:YYजहां XXआप पिछले चरण में प्राप्त किए YYगए नंबर हैं और उस संशोधन की संख्या है जिसे आप वापस करना चाहते हैं।

  5. किया हुआ! इसका संभावित अपवाद यह है कि आपकी वर्किंग कॉपी में फाइलें जो कि तब मौजूद नहीं YYथीं, जब संशोधन मूल रूप से किया गया था, तब भी रहेगा, क्योंकि डिफ़ॉल्ट रूप से svn चीजों को हटा नहीं देता है। यदि आप उनसे छुटकारा पाना चाहते हैं, तो उनमें से svn del [filename]प्रत्येक पर चलाएं ।

  6. बहुत बढ़िया! अब अपनी वर्किंग कॉपी के साथ खेलें क्योंकि उन सभी मध्यवर्ती संपादन कभी नहीं हुए थे। और जब आप अपने प्रयासों को करने के लिए तैयार हों, तो हमेशा की तरह svn प्रतिबद्ध का उपयोग करें!


1
विंडोज ओएस में, # 4 रन svn merge -rXX:YY .याद रखें कि वर्तमान डायरेक्टरी को संदर्भित करने के लिए लाइन के अंत में डॉट लगाएं। और TortoiseSVN में, रिवर्स मर्ज करने का विकल्प है।
शांता कुमारा

3
यह वास्तव में "पहले के संशोधन, जो कि प्रधान संशोधन बन जाएगा" पर वापस नहीं आता है। यह पुराने संशोधन को हेड नहीं बनाता है। बल्कि, यह एक नया HEAD बनाता है। देखिए मार्टिन का जवाब
मैथ्यू फ्लैशेन

मैंने अनुगामी अवधि के बारे में शांता की टिप्पणी को शामिल करने के लिए उत्तर को संशोधित किया। यह * निक्स पर भी ऐसा ही है।
माइक कोर्मेंडी

72

इसने मेरे लिए काम किया। यह देखते हुए कि आपके पास हेड के रूप में 1234 का संशोधन है और आप पिछले तीन कमिट्स को वापस करना चाहते हैं:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1। आप केवल एक ही व्यक्ति हैं, जिन्होंने प्रश्न को समझा और एक विशिष्ट उत्तर दिया।
मैथ्यू फ्लेशेन

6
यह तकनीकी रूप से सही उत्तर है। हालांकि, यह इंगित किया जाना चाहिए कि यह, इसके अलावा संभवतः करने के लिए जटिल होने के अलावा, सभी चेक-आउट प्रतियों को भी अमान्य कर देगा - इसलिए आपको रेपो का उपयोग करने वाले किसी भी व्यक्ति को सचेत करने की आवश्यकता होगी।
सालेस्के

1
त्वरित और आसान और इस बिंदु पर और वास्तव में पोस्टर ने क्या पूछा।
अप्रकाशित

7
जब तक आप नए रेपो पर रिपॉजिटरी यूयूआईडी को कॉपी करना भी सुनिश्चित करते हैं ("svnadmin setuuid" देखें, पुराने रेपो पर "svn info" में UUID से कॉपी करें), केवल उन संशोधनों के अपडेट से जिन्हें आप काट रहे हैं। अवैध होना।
ब्रायन पेटी


5

मुझे पता है कि यह एक पुराना सवाल है, हालाँकि, मैंने अभी पाया है कि इसे विंडोज / टोर्टोइस्स वीएन के साथ कैसे किया जाता है।

एक टिप्पणी के रूप में, आप एक संशोधन को "हटा" नहीं सकते हैं, लेकिन आप जो कर सकते हैं वह एक और अधिक वर्तमान संशोधन कर सकता है जो उस संशोधन के समान है जिसे आप वापस करना चाहते हैं।

  1. जिस निर्देशिका से आप पुनरीक्षण करना चाहते हैं, उसके लिए रिपॉजिटरी का HEAD चेकआउट करें।
  2. TortoiseSVN में "शो लॉग" दृश्य को उस उच्चतम स्तर निर्देशिका के लिए लोड करें जिसे आप वापस करना चाहते हैं (जैसे "ट्रंक")।
  3. आप जिस नोट को हटाना चाहते हैं, उसे राइट-क्लिक करें: यह वह संशोधन है जिसे आप हटाना चाहते हैं, न कि वह जिसे आप वापस करना चाहते हैं।
  4. "इस संशोधन से परिवर्तन वापस करें" चुनें।
  5. प्रॉम्प्ट पर "हां" पर क्लिक करें।
  6. चेकआउट को सामान्य रूप से अपडेट करें, लेकिन "HEAD" पर।
  7. इसे वापस करें।

फिर आपको बाकी सभी लोगों के पास जाना होगा जिन्होंने इसे चेक किया है और उन्हें अपडेट करने और किसी भी नई फाइल को निकालना सुनिश्चित करें।

इसके अलावा, आपको यह सुनिश्चित करने की आवश्यकता होगी कि हर कोई जानता है कि संशोधन क्या था और संभवतः विवरण को अपडेट करें।


यह सामान्य "रिवर्ट" प्रक्रिया से अलग कैसे है?
तोमर डब्ल्यू

एक रिवर्ट सिर्फ आपकी वर्किंग कॉपी को बदल देता है जो रेपो में है ... यह है कि किसी रिपोर्ट के HEAD को किसी भी पिछले कमेट की स्थिति को कैसे दर्शाया जाए।
मार्टिन

1
इसके लिए धन्यवाद - ऐसा करना कछुआ एसवीएन का तरीका था, बस मुझे एक गलत कमिटमेंट वापस करने की जरूरत थी :)
डॉ। एंड्रयू बर्नेट-थॉम्पसन

लॉग विंडो में एक संदर्भ मेनू प्रविष्टि " इस संशोधन पर वापस लौटें " भी है ।
उवे कीम

4

आप इस उद्देश्य के लिए डंप / लोड का उपयोग कर सकते हैं।

आप कुछ संशोधन के लिए बैकअप बनाने के लिए svnsync का भी उपयोग कर सकते हैं।

यदि आपके पास एक बड़ा भंडार है, तो समय लगता है।


3

मेरे लिए (VisualSVN, 30-HEAD) यह काम करता है:

  डेल C: \ Repositories \ MyRepo \ Revs \ 0 \ 30
  डेल C: \ Repositories \ MyRepo \ Revs \ 0 \ 29
  डेल C: \ Repositories \ MyRepo \ Revs \ 0 \ 28
  डेल C: \ Repositories \ MyRepo \ Revprops \ 0 \ 30
  डेल C: \ Repositories \ MyRepo \ Revprops \ 0 \ 29
  डेल C: \ Repositories \ MyRepo \ Revprops \ 0 \ 28
  इको 27> C: \ Repositories \ MyRepo \ db \ current
  


यह अन्य उत्तरों से बेहतर कैसे है?
पूर्ण

यह बहुत तेज है।
एंटोन गोलिखॉफ

0

टर्मिनल पर जाएँ और svn repsitory पर जाएँ: अब टाइप करें

svn अपडेट -r "संशोधन संख्या जिसे आप वापस करना चाहते हैं"


2
सुपर उपयोगकर्ता में आपका स्वागत है! कृपया प्रश्न को फिर से ध्यान से पढ़ें। आपका उत्तर मूल प्रश्न का उत्तर नहीं देता है । ओ पी कहते हैं, "मैं बस अपना काम कर प्रति पर 'वापस लाएं' का उपयोग नहीं करना चाहते हैं"
DavidPostill
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.