SVN से हटाई गई फ़ाइल को पुनर्स्थापित करने का सही तरीका क्या है?


119

मैंने एक रेपो से एक फ़ाइल को हटा दिया है और अब इसे वापस रखना चाहता हूं। सबसे अच्छा मैं समझ सकता हूं:

  • हटाने से पहले संशोधन के लिए अद्यतन
  • फाइलों को कहीं और कॉपी करें
  • सिर के लिए अद्यतन
  • फ़ाइलों की प्रतिलिपि बनाएँ
  • उनको जोड़ों
  • प्रतिबद्ध

यह सिर्फ बुरा बदबू आ रही है और यह बूट करने के लिए सभी इतिहास खो देता है। ऐसा करने का एक बेहतर तरीका हो गया है। मैं पहले ही SVN बुक में देख चुका हूँ, लेकिन कुछ भी नहीं मिला और अब SVN टैग सूची नीचे देख रहा हूँ।


4
निश्चित रूप से तुकशन का उत्तर आपके प्रश्न का सही प्रत्यक्ष उत्तर है, और इसे स्वीकार किया जाना चाहिए?
जेम्स मैककॉर्मैक

@JamesMcCormack: उनके उत्तर में NB देखें।
BCS

2
एक टिप, यदि आपने फ़ाइल को हटा दिया है और अभी तक बदलाव नहीं किया है, तो बस क्लिक करें और अपडेट इसे पुनर्प्राप्त करेगा।
हमाद खान

जवाबों:


57

Svn मर्ज का उपयोग करें:

svn merge -c -[rev num that deleted the file] http://<path to repository>

तो एक उदाहरण:

svn merge -c -12345 https://svn.mysite.com/svn/repo/project/trunk
             ^ The negative is important

TortoiseSVN के लिए (मुझे लगता है ...)

  • एक्सप्लोरर में राइट क्लिक करें, TortoiseSVN -> मर्ज पर जाएं ...
  • सुनिश्चित करें कि "संशोधन की एक सीमा मिलाएं" चयनित है, अगला क्लिक करें
  • "पुनरीक्षण श्रेणी को मर्ज करने के लिए" पाठ बॉक्स में, फ़ाइल को हटाने वाले संशोधन को निर्दिष्ट करें
  • "रिवर्स मर्ज" चेकबॉक्स जांचें, अगला क्लिक करें
  • मर्ज पर क्लिक करें

हालांकि, पूरी तरह से अप्रयुक्त है।


ओपी द्वारा संपादित : यह TortoiseSVN के मेरे संस्करण पर काम करता है (अगले बटन के बिना पुरानी किस्म)

  • उस फ़ोल्डर पर जाएं, जिसमें सामान भरा हुआ था
  • एक्सप्लोरर में राइट क्लिक करें, TortoiseSVN -> मर्ज पर जाएं ...
  • में से अनुभाग संशोधन कि हटाया था दर्ज
  • में करने के लिए खंड हटाने से पहले संशोधन दर्ज करें।
  • "मर्ज" पर क्लिक करें
  • प्रतिबद्ध

चाल को पीछे की ओर मिलाना है । मुझे सही दिशा में इंगित करने के लिए sud.bright को Kudos !


संपादित करें: हम विभिन्न संस्करणों का उपयोग कर रहे हैं। मैंने जिस विधि का वर्णन किया है वह पूरी तरह से TortoiseSVN के मेरे संस्करण के साथ काम करती है।

ध्यान देने वाली बात यह भी है कि अगर आप रिवर्स मर्ज करने वाले कमिटमेंट में कई बदलाव हुए हैं, तो आप मर्ज करने से पहले उन दूसरे बदलावों को वापस करना चाहेंगे। यदि आप नहीं करते हैं, तो उन अतिरिक्त परिवर्तनों को भी उलट दिया जाएगा।


मैं खिड़कियों पर हूँ और SVN का CLI संस्करण नहीं है। क्या आप जानते हैं कि ortoiseSVN कैसे है?
BCS

राइट-क्लिक मेनू पर कछुआ का "मर्ज" है। इसमें रेव के लिए बॉक्स भरने होते हैं। यह देखने के लिए कि क्या आपने इसे सही सेट किया है, यह देखने के लिए "ड्राई रन" भी करें। और याद रखें, जब तक आप इसे नहीं करते तब तक परिणाम की गिनती नहीं होती। आप यह सब haywire जाता है अगर आप वापस कर सकते हैं।
गबरी

मैं कहता हूँ कि ओपी के पास कछुआ का पुराना संस्करण है। नए एक अलग (अवर) मर्ज संवाद है
1800 जानकारी 5

मुझे अभी तक किसी भी मर्ज सिस्टम को नहीं देखना है जो चूसना नहीं था। टेक्स्ट, फाइलें, डायर, वर्ड डॉक्स, yuck। मुझे लगता है कि यह कोई समस्या नहीं है। OTOH चीजें कम या ज्यादा चूस सकती हैं। :)
BCS

1
यदि आप कई फ़ाइलों को वापस लाते हैं और फिर किसी एक को वापस करते हैं तो यह अपरिवर्तनीय है। आउच! मुझे लगता है मैं सिर्फ कुछ चोट लगी है।
BCS

176

शॉन ब्राइट द्वारा सुझाए गए svn मर्ज करने के साथ समस्या यह है कि विलोपन के रूप में एक ही संशोधन में किए गए अन्य परिवर्तनों को पुन: प्रस्तुत करता है। एक svn प्रतिलिपि एक अधिक लक्षित ऑपरेशन है जो केवल हटाई गई फ़ाइलों को प्रभावित करेगा।

Tortoise SVN का उपयोग करके आप एक फ़ाइल को पुनर्जीवित कर सकते हैं जिसे आपके वर्किंग कॉपी डायरेक्टरी से और बाद में SVN रिवीजन से, एक svn कॉपी के माध्यम से निम्नानुसार हटा दिया गया है:

  • पहले से फ़ाइल में काम करने वाले कॉपी फ़ोल्डर में ब्राउज़ करें।
  • एक्सप्लोरर में फ़ोल्डर पर राइट क्लिक करें, TortoiseSVN पर जाएं -> लॉग दिखाएं।
  • संशोधन से ठीक पहले पुनरीक्षण संख्या पर क्लिक करें जिसने फ़ाइल को हटा दिया और "ब्राउज़ भंडार" का चयन करें।
  • हटाए गए फ़ाइल पर राइट क्लिक करें और "कॉपी टू वर्किंग कॉपी ..." और सेव करें।

डिलीट हुई फाइल अब वर्किंग कॉपी फोल्डर में होगी। इसे एसवीएन में फिर से जोड़ने के लिए, पुनर्स्थापित फ़ाइल पर राइट क्लिक करें और एसवीएन कमिट का चयन करें।

एनबी: यह विधि बहाल फ़ाइल के पिछले इतिहास को संरक्षित करेगी, हालांकि टोर्टोइसेएसवीएन लॉग में पूर्व इतिहास देखने के लिए आपको लॉग संदेश संवाद में "कॉपी / नाम बदलें पर रोक" सुनिश्चित करने की आवश्यकता है।


26
यह भी सर्वर पर सीधे प्रदर्शन किया जा सकता है, उपयोगी अगर हटाए गए फ़ाइलों या फ़ोल्डर काफी बड़े थे: svn cp -r 1993 http://example.com/svn/trunk/path@1993 http://example.com/svn/trunk/path
क्रेग

यह इसे करने का सही तरीका है। बस TortoiseSVN 1.8.1 के साथ कोशिश की और यह सलाह के अनुसार काम करता है।
डॉ। जियानलुइगी ज़ैन ज़ैनेटिनी

उत्तम!! सरल और प्रभावी। समाधान के लिए धन्यवाद
हंटर

इस पद्धति ने मेरे लिए एक चाइल्ड ब्रांच में एक फ़ाइल को फिर से स्थापित करना बहुत आसान बना दिया, जिसे उसकी मूल शाखा से हटा दिया गया था। शायद ऐसा करने का एक तरीका था merge, लेकिन मैंने इसका पता नहीं लगाया।
arr_sea

चरण 3 में "बस पहले" महत्वपूर्ण है। चरण 4 में, कछुआ शिकायत करता रहा कि फ़ाइल पहले से मौजूद है, भले ही मैंने इसे विंडोज डिलीट का उपयोग करके हटा दिया था। मुझे अपनी कार्यशील प्रति पहले अपडेट करनी थी। (मेरे सहकर्मी ने कछुआ डिलीट का उपयोग करके कई फाइलें हटाई थीं, और फिर बदलाव किए।) TortoiseSVN 1.8.1।
leqid

27

पूर्णता के लिए, यह वही है जो आपने svn पुस्तक में पाया होगा, क्या आप जानते हैं कि क्या देखना है। यह वही है जो आपने पहले ही खोज लिया है:

पूर्ववत परिवर्तन

हटाए गए आइटम को फिर से जीवित करना

पुस्तक के अधिक हाल के (और विस्तृत) संस्करण से समान बात:

पूर्ववत परिवर्तन

हटाए गए आइटम को फिर से जीवित करना


3
बस ज्यादातर समस्याओं को दिखाने के लिए जाना जाता है कि क्या देखना है।
बीसीएस

16

कमिट किए गए परिवर्तनों को वापस लाने के लिए कछुआ SVN कॉपी कार्यक्षमता का उपयोग करें:

  1. हटाए गए फ़ाइलों / फ़ोल्डर वाले मूल फ़ोल्डर पर राइट क्लिक करें
  2. "शो लॉग" का चयन करें
  3. उस संस्करण पर चयन करें और राइट क्लिक करें जिसके पहले परिवर्तन / हटाए गए थे
  4. "ब्राउज़ भंडार" का चयन करें
  5. उस फ़ाइल / फ़ोल्डर का चयन करें जिसे पुनर्स्थापित करने की आवश्यकता है और राइट क्लिक करें
  6. "कॉपी" का चयन करें जो फ़ाइलों / फ़ोल्डरों को हेड रिविजन में कॉपी करेगा

उम्मीद है की वो मदद करदे


13

मैं हमेशा सर्वर ऑपरेशन के रूप में svn कॉपी का उपयोग करने लगता हूं, तो यह सुनिश्चित नहीं होता है कि यह दो कार्य पथों के साथ काम करता है या नहीं।

यहाँ परियोजना की एक स्थानीय कामकाजी प्रति में एक हटाई गई फ़ाइल को पुनर्स्थापित करने का एक उदाहरण है:

svn copy https://repos/project/modules/module.js@3502 modules/module.js

जबकि परियोजना निर्देशिका के अंदर है। यह संपूर्ण निर्देशिकाओं को पुनर्स्थापित करने के लिए भी काम करता है।


2
+1 कॉपी @ काम किया। कॉपी -r मैक OSX के तहत CollabNet svn 1.6.17 का उपयोग करने के लिए काम नहीं करता है।
ग्रे

2
इसके अलावा उपयोग किए गए संशोधन को हटाने से ठीक पहले संशोधन होना चाहिए ।
ग्रे

6

यदि आप Tortoise SVN का उपयोग कर रहे हैं, तो आपको अपनी कार्य प्रति में संशोधन से प्रभावी रूप से परिवर्तन करने में सक्षम होना चाहिए (प्रभावी रूप से रिवर्स-मर्ज का प्रदर्शन करना), फिर फ़ाइल को पुनः जोड़ने के लिए एक और प्रतिबद्ध करें। अनुसरण करने के चरण इस प्रकार हैं:

  1. जहाँ आपने फ़ाइल को डिलीट किया था, वहाँ काम करने वाली कॉपी में फोल्डर को ब्राउज़ करें।
  2. रेपो-ब्राउज़र पर जाएं।
  3. उस संशोधन को ब्राउज़ करें जहाँ आपने फ़ाइल को हटाया था।
  4. परिवर्तन सूची में, आपके द्वारा हटाई गई फ़ाइल ढूंढें।
  5. फ़ाइल पर राइट क्लिक करें और "इस संशोधन से परिवर्तन वापस करें" पर जाएं।
  6. यह इतिहास को ध्यान में रखते हुए फ़ाइल को आपकी कार्यशील प्रतिलिपि में पुनर्स्थापित करेगा।
  7. फ़ाइल को अपने रिपॉजिटरी में वापस जोड़ने के लिए प्रतिबद्ध करें।

उस मामले में ठीक है, सवाल यह था कि आपने जो वर्णन किया है उसे कैसे करें। (उत्तर: बैक मर्ज का उपयोग करें)
BCS

1
मैं बात कर रहा था कि इसे कछुआ एसवीएन में कैसे करना है। मैं और अधिक विस्तार जोड़ूंगा।
डेवोगोन्स

5

सबसे आसान तरीका है कि मैं फ़ाइलों को पुनर्स्थापित करने में सक्षम हूं और संशोधन इतिहास नहीं खोना एसवीएन कॉपी का उपयोग कर रहा है , मेरे ऊपर मर्ज उदाहरण समान चीज़ को प्राप्त करने के लिए अधिक जटिल तरीके की तरह लगता है। जब आप किसी संशोधन को बहाल करना चाहते हैं तो विलय करने की आवश्यकता क्यों है?

मैं इस उदाहरण में निम्नलिखित का उपयोग करता हूं और यह काफी अच्छी तरह से काम करता है।

svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs

मैं हमेशा svn copyएक सर्वर ऑपरेशन के रूप में उपयोग करने के लिए लगता है तो यकीन है कि अगर यह दो काम कर पथ के साथ काम नहीं करता है।


3
SVN COPY अनुशंसित दृष्टिकोण है। सिंटेक्स बहुत सरल है: svn copy [SVN URL] @ [REVISION # WHILE FILE EXISTS] [LOCAL PATH TO RESTORE TO] से Visualsvn.com/support/svnbook/branchorge/basicmerging । बस खुद को इस का इस्तेमाल किया।
अमित

यह मेरे लिए सबसे ज्यादा मायने रखता है, मैं भी इस दृष्टिकोण का उपयोग करता हूं
दिमित्री पश्केविच

4

कछुआ SVN के साथ :

यदि आपने अभी तक अपने परिवर्तन नहीं किए हैं, तो आप उस पैरेंट फ़ोल्डर पर एक रिवर्ट कर सकते हैं, जहाँ आपने फ़ाइल या डायरेक्टरी को डिलीट किया था।

यदि आपने पहले ही डिलीट की गई फाइल को कमिट कर दिया है, तो आप रिपॉजिटरी ब्राउजर का उपयोग कर सकते हैं, रिविजन में बदल सकते हैं जहां फाइल अभी भी मौजूद है और फिर संदर्भ मेनू से कमांड कॉपी टू ... का उपयोग करें। लक्ष्य के रूप में अपनी कार्य प्रतिलिपि में पथ दर्ज करें और हटाए गए फ़ाइल को रिपॉजिटरी से आपकी कार्य प्रतिलिपि में कॉपी किया जाएगा।


अच्छा। मैं अगली बार कोशिश करूँगा।
BCS

1

आप बस एक फ़ाइल की जाँच करना चाहिए जिसे आप पुनर्स्थापित करना चाहते हैं। कुछ ऐसा प्रयास करें svn co svn://your_repos/path/to/file/you/want/to/restore@revजहाँrev कि अंतिम संशोधन है जिस पर फ़ाइल मौजूद थी।

मुझे यह थोड़ी देर पहले करना था और अगर मुझे सही ढंग से याद है, तो काम नहीं -rकरने के विकल्प का उपयोग करके svn; मुझे :revसिंटैक्स का उपयोग करना था । (हालांकि मैं इसे पीछे की ओर याद कर सकता हूं ...)


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