एसवीएन पूर्ववत करें


135

यदि आप एक SVN वर्किंग कॉपी से डायरेक्टरी हटाते हैं, लेकिन अभी तक कमिट नहीं किया है, तो यह स्पष्ट नहीं है कि इसे वापस कैसे लाया जाए। जब आप "svn undo d" टाइप करते हैं, तो Google "svn undo delete before प्रतिबद्ध" का सुझाव भी देता है, लेकिन खोज परिणाम अनपेक्षित होते हैं।

संपादित करें: मैं एक समाधान चाहूंगा जो 1.4.4 में तोड़फोड़ का काम करता है


क्या आपके पास लंबित परिवर्तनों के साथ हटाए गए किसी भी निर्देशिका हैं? यदि ऐसा है, तो उच्च स्तर से पलटते समय सावधान रहें आप बदलाव खो सकते हैं।
रसेल

जवाबों:


145

svn revert deletedDirectory

यहाँ प्रलेखन है के लिए svn revertआदेश।


संपादित करें

यदि deletedDirectoryका उपयोग करके हटाया गया था rmdirऔर नहीं svn rm, तो आपको करना होगा

svn update deletedDirectory

बजाय।


3
यह नया होना चाहिए, यह एसवीएन 1.4.4 में काम नहीं करता है। (यह पहली चीज थी जो मैंने कोशिश की थी।)
लाक

4
यह वही है जो 1.4.4 कहता है, btw: $ svn वापस लौटने में मदद: प्रीस्टाइन वर्किंग कॉपी फ़ाइल को पुनर्स्थापित करें (अधिकांश स्थानीय संपादन को पूर्ववत करें)। उपयोग: पाथ को वापस लाएं ... नोट: इस उप-क्षेत्र को नेटवर्क एक्सेस की आवश्यकता नहीं है, और किसी भी विवादित राज्यों को हल करता है। हालाँकि, यह निकाले गए निर्देशिकाओं को पुनर्स्थापित नहीं करता है।
16

1
1.6.6 की मदद में एक ही पाठ है, लेकिन जब मैंने इसका परीक्षण किया तो यह मेरे लिए काम कर गया। ध्यान दें कि यदि आपने svn deleteनिर्देशिका को हटाने के लिए उपयोग नहीं किया है , लेकिन इसके बजाय इसे हटा दिया है rmdir, तो आपको svn update deletedDirectoryइसके बजाय इसकी आवश्यकता होगी ।
बजे माइकल हैकर

मैंने एक फ़ाइल (svn del) एक स्थानीय svn-ed निर्देशिका से हटा दी है। svn अद्यतन काम नहीं किया लेकिन svn वापस काम किया। मैं मैक के लिए SynchroSVN का उपयोग कर रहा था। हालांकि, सुझावों के लिए धन्यवाद।
करीम

5
लिंक के अनुसार, सभी सामग्री के साथ पूरी निर्देशिका को हटाने के लिए svn -R का उपयोग करें, जो कि शायद आप चाहते हैं। svn रिवर्ट बिना -R सिर्फ डायरेक्टरी को रीस्टोर करता है, कंटेंट को नहीं।
n13

156

1) करते हैं

svn revert . --recursive

2) त्रुटियों के लिए पार्स आउटपुट जैसे

"Failed to revert 'dir1/dir2' -- try updating instead."

3) त्रुटि निर्देशिकाओं में से प्रत्येक के लिए svn अप:

svn up dir1/dir2

12
यह सबसे सटीक उत्तर है, बहुत-बहुत धन्यवाद, आपने मेरी बहुत मदद की।
ग्रीनल्डमैन

1
सिवाय इसके कि सब कुछ पलट जाए? आप ऐसा नहीं करना चाह सकते हैं।
n13

1
यह सबसे अधिक समझ में आता है यदि आपके पास एक संपूर्ण फ़ोल्डर है जिसे SVN को लगता है कि हटा दिया गया था। मेरे पास काम की कॉपी की जाँच करते समय। एक फ़ोल्डर पहले से मौजूद था, इसलिए इसे संघर्ष में रखा गया था और इसकी जाँच नहीं की गई थी। यह दूसरे फ़ोल्डर का लिंक था। मैंने इसका नाम बदला और svn upइसे जांचने की कोशिश की , संघर्ष का एहसास किया, किया svn resolved fooऔर svn statusमुझे बताया कि मेरे पास लगभग 10k फाइलें हैं Dsvn upऔर svn revertउन्हें वापस नहीं मिला, लेकिन इससे समस्या हल हो गई।
सिमबेक

6
+1 --recursiveजिसके लिए हटाई गई निर्देशिकाओं की सामग्री को पुनर्स्थापित करने में मदद मिलती है।
मेलेबियस

1
हे भगवान, आपने मेरी शाम को बचाया!
ArturOlszak

32

मेरे लिए काम क्या है

svn revert --depth infinity deletedDir

इसने मेरे लिए बहुत अच्छा काम किया (svn 1.7.10) जहां svn ने डिलीट किया और फिर काम करने में असफल रहा। बहुत बढ़िया जवाब।
rtome

4

आपके द्वारा हटाई गई निर्देशिका से ऊपर के स्तर से ऑपरेशन (पुनरावर्ती) करें।


1
यह WAY को आवश्यकता से अधिक बदलावों को मिटा देगा।
माइकल हैकर

वह सबवर्सन 1.4.4 के साथ काम नहीं करता है (मैंने अभी इसकी कोशिश की है)। svn मदद से यह भी कहते हैं कि "इस उपकेंद्र को नेटवर्क एक्सेस की आवश्यकता नहीं है, और किसी भी विवादित राज्यों को हल करता है। हालांकि, यह हटाए गए निर्देशिकाओं को पुनर्स्थापित नहीं करता है।" मुझे खेद है, मुझे संस्करण निर्दिष्ट करना चाहिए था। 1.4.4 मैक ओएस एक्स 10.5 के साथ आता है।
16

4

इसे एक लाइनर में बनाने के लिए आप कुछ इस तरह की कोशिश कर सकते हैं:

svn status | cut -d ' ' -f 8 | xargs svn revert

मैं इसके नाम से रिक्त स्थान के साथ निर्देशिका बना सकता हूं। यह 'कट' AFAIK को तोड़ सकता है।
डेनिस बर्मेनकोव

1

सबसे सरल समाधान जो मुझे मिल सकता था, वह था कि पेरेंट डायरेक्टरी को वर्किंग कॉपी (rm -rf के साथ, svn delete नहीं) से डिलीट किया जाए, और फिर दादा-दादी में svn अपडेट चलाया जाए। जैसे, यदि आपने / a / b / c, rm -rf a / b, cd a, svn अप हटा दिया है। वह सब कुछ वापस लाता है। बेशक, यह केवल एक अच्छा समाधान है यदि आपके पास मूल निर्देशिका में कोई अन्य अनपेक्षित परिवर्तन नहीं हैं जिन्हें आप रखना चाहते हैं।

उम्मीद है कि यह पृष्ठ अगली बार जब मैं इस प्रश्न को गूगल करूँगा तो परिणाम सबसे ऊपर होगा। यह बेहतर होगा यदि किसी ने एक क्लीनर विधि का सुझाव दिया, निश्चित रूप से।


यह मानते हुए कि माता-पिता में कोई उपनिर्देशिका नहीं है जिनमें लंबित परिवर्तन हैं।
रसेल

0

आप फ़ोल्डर को हटा सकते हैं और करने से पहले मूल निर्देशिका को अपडेट कर सकते हैं:

rm -r some_dir

svn update some_dir_parent

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.