एसवीएन में एक विशेष संशोधन के लिए एकल फ़ाइल को वापस लाना


182

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

धन्यवाद।

$ svn log myfile.py
----------------------
r179 | xx | 2010-05-10

Change 3
----------------------
r175 | xx | 2010-05-08

Change 2
----------------------
r174 | xx | 2010-05-04

Initial

जब आपने कहा, क्या मतलब था, 7 साल पहले, lol
कल्पेश सोनी

जवाबों:


181

अगर आप अपनी वर्किंग कॉपी में पुरानी फाइल चाहते हैं:

svn up -r 147 myfile.py

यदि आप रोलबैक करना चाहते हैं, तो यह देखें कि " तोड़फोड़ में हमारे कोड के पुराने संस्करण में कैसे लौटें? "।


8
लेकिन अगली बार जब आप इसे अपडेट करेंगे तो आपको वह फाइल मिल जाएगी जिसे आप वापस नहीं चाहते थे ...: S
andygoestohollywood

2
अगर आप इसे वापस नहीं चाहते हैं, तो svn उस फ़ाइल को कमिट करें, जिस संस्करण को आप चाहते हैं उसे रेपो में रखें
पैकेट ट्रैसर

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

1
मैं फिर से उलटा फ़ाइल कैसे कर सकता हूं?
मार्शियो

2
यह काफी सही नहीं है, क्योंकि सीएक्सजे का उल्लेख है, अपडेटेड फाइल करने का कोई तरीका नहीं है। आप शायद ऐसा करना चाहते हैं जैसा कि मिच डेम्पसे कहते हैं (ध्यान दें, हालांकि, - फ़ाइल को लागू करने के लिए बाध्य करने के लिए --फोर्स): svn निर्यात --force -r 147 myfile.py myfile.py
avejidah

76

svn बिल्ली एक संशोधन भी लेता है!

svn cat -r 175 mydir/myfile > mydir/myfile


20
यह पृष्ठ पर अब तक का सबसे अच्छा उत्तर है। यह बदली हुई फ़ाइल को उस स्थिति में छोड़ देता है जिसे प्रतिबद्ध किया जा सकता है।
डॉटनचेन

जब आप एक नई फ़ाइल में चिपकाने का काम नहीं कर रहे हैं
ahnbizcad

haha इसे वापस देख, आईडी क्या संदर्भ मैं सोच रहा था जब मैं पोस्ट किया था। मैं याद नहीं कर सकता। यह निरर्थक लगता है।
अहानजकद

यह तब सरल और सीधा है जब आप केवल अपने परिवर्तनों को पूर्ववत करना चाहते हैं और किसी भी संस्करण नियंत्रण तकनीकी के बिना यह एक फ़ाइल वापस पूर्व स्थिति में लाना चाहते हैं।
बेनामी

57
svn revert filename 

यह एक फ़ाइल को वापस करना चाहिए।


4
लंबे आदेशों के साथ अन्य सभी उत्तरों के साथ क्या हो रहा है? धन्यवाद।
मास्टरएक्सिलो

आपका स्वागत है। मुझे नहीं पता कि अन्य उत्तरों के साथ क्या हो रहा है .. lol
thestar

13
यह किस संशोधन को दर्शाता है? डॉक का कहना है कि रेपो में नवीनतम की जगह बस लेट है। प्रश्न यह है कि पहले के संस्करण में वापस कैसे लाया जाए।
tgkprog

1
यह रेपो के नवीनतम संस्करण में बदल जाता है। यदि आप प्रश्नों का विवरण पढ़ते हैं, तो ऐसा लगता है कि वह पूरी निर्देशिका नहीं बल्कि एक ही फाइल को वापस करना चाहते हैं।
thestar

5
मेरा मानना ​​है कि यह सब आपके काम की कॉपी को 'वापस' बदलकर नष्ट कर देता है। या जिसे कभी चेक आउट किया गया था। svn अपडेट -r VER फाइल करके पुष्टि करें, फिर एक svn रिवर्ट करें।
गेरार्ड ओनील सेप

50

एक फ़ाइल के लिए, आप कर सकते हैं:

svn export -r <REV> svn://host/path/to/file/on/repos file.ext

आप कर सकते हैं svn revert <file>लेकिन वह केवल अंतिम कार्य प्रतिलिपि को पुनर्स्थापित करेगा।


2
निर्यात करें, फिर इसे अपनी स्थानीय प्रति पर चिपकाएँ, फिर इसे फिर से करें?
tgkprog

1
@tgkprog यह करने का एक तरीका है, हां
मिच डेम्पसे

@tgkprog और "पसंदीदा" तरीका क्या है?
hbogert

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

21

अब तक यहां सभी उत्तर महत्वपूर्ण डाउनसाइड के लगते हैं, जटिल हैं (रेपो यूआरआई खोजने की आवश्यकता है) या वे ऐसा नहीं करते हैं जो सवाल शायद पूछा है: रेपो को एक कार्यशील स्थिति में फिर से पुराने संस्करण के साथ कैसे प्राप्त करें फ़ाइल

svn merge -r head:[revision-number-to-revert-to] [file-path]IMO ऐसा करने का सबसे साफ और सरल तरीका है। कृपया ध्यान दें कि हटाए गए फ़ाइल को वापस लाने से यह काम नहीं करता है [1]। निम्नलिखित प्रश्न भी देखें: किसी फ़ाइल के पिछले SVN संशोधन पर वापस लौटने का बेहतर तरीका?

[१] इसके लिए आप चाहते हैं svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn up, यह भी देखें कि एसवीएन से हटाई गई फ़ाइल को पुनर्स्थापित करने का सही तरीका क्या है?


मैं यह टिप्पणी करना चाहता हूं कि कम से कम मेरे तोड़फोड़ के संस्करण के svn mergeलिए, किसी कारण के लिए एक तर्क के रूप में कई फाइलें नहीं लेते हैं। इस मामले में यह सिर्फ एक त्रुटि संदेश के बिना कुछ नहीं करने के लिए लगता है।
Wrzlprmft

लेकिन मेरी कमांड अभी भी प्रत्येक फ़ाइल के लिए इसे दोहराकर काम करती है, है ना?
मिशेल मूलर

हाँ, यह वास्तव में करता है।
१०:०६ पर Wrzlprmft

1
सहमत था कि यह सबसे साफ है।
केविन जीएल

13

सबसे अच्छा तरीका है:

svn merge -c -RevisionToUndo ^/trunk

यह संशोधन की सभी फ़ाइलों को पूर्ववत करने की तुलना में उन फ़ाइलों को वापस करेगा, जिन्हें आप पूर्ववत करना पसंद नहीं करते हैं। -संशोधन के लिए उपसर्ग के रूप में डैश ( ) को न भूलें ।

svn revert File1 File2

अब परिवर्तन वापस करें।


9

आप करना चाहते हैं

svn merge -r [revision to revert from]:[revision to revert to] [path/filename]

एक बार जब आप ऐसा कर लेते हैं, तो आपके पास फ़ाइल का एक संशोधन योग्य स्थिति में होगा। फ़ाइल को कमिट करें।


7

मैंने पाया svn catकि कमांड के माध्यम से ऐसा करना सरल है ताकि आपको एक संशोधन भी निर्दिष्ट न करना पड़े।

svn cat mydir/myfile > mydir/myfile

यह शायद टाइमस्टैम्प जैसे इनोड (मेटाडेटा) डेटा को वापस नहीं करेगा।


फिर फ़ाइल को कमिट करें ताकि यह रेपो में जाए
tgkprog

3
इसने मेरे लिए अपडेट से बेहतर काम किया। क्योंकि अद्यतन आपको उस फ़ाइल में किए गए संशोधन करने की अनुमति नहीं देता है। (svn 1.8.3)
fe_lix_

7

किसी ने भी इसका उल्लेख नहीं किया

बिना संशोधन संख्या का पता लगाए आप इसे लिख सकते हैं, अगर आपने अभी कुछ किया है जिसे आप वापस करना चाहते हैं, तो यह अभ्यस्त काम नहीं करेगा यदि आपने किसी अन्य फ़ाइल को बदल दिया है और लक्ष्य फ़ाइल अंतिम परिवर्तित फ़ाइल नहीं है

svn merge -r HEAD:PREV file

यदि आपके पास टिप्पणी है तो कृपया संपादन करने से पहले यहां चर्चा करें।
कल्पेश सोनी

1
क्या प्रश्न में परिदृश्य को सबसे हाल के बदलाव के रिवर्स-मर्ज की आवश्यकता नहीं है, जैसे कि हमें HEAD से PREV तक जाने के लिए आवश्यक परिवर्तनों को लागू करना चाहिए?
निक रुसो

4
आदेश के svn merge -r HEAD:PREV fileरूप में होना चाहिए @ निक रूसो ने कहा
हेंज

4

यदि यह केवल कुछ फ़ाइलों का है, और यदि आप कछुआ SVN का उपयोग कर रहे हैं, तो आप निम्नलिखित दृष्टिकोण का उपयोग कर सकते हैं:

  1. अपनी स्रोत फ़ाइल पर राइट क्लिक करें, और "TortoiseSVN" -> "लॉग दिखाएं" चुनें।
  2. लॉग में एक संशोधन पर राइट क्लिक करें, और "संशोधन सहेजें ..." का चयन करें।
  3. पुराने संशोधन को आपकी वर्तमान फ़ाइल को अधिलेखित कर दें।
  4. अधिलेखित स्रोत फ़ाइल को कमिट करें।

यह फ़ाइल-xxxx जैसी एक नई फ़ाइल को सहेजता है, जिसमें xxxx पुराना संशोधन नंबर है। हम आगे क्या करें? नया संशोधन (HEAD उदा) हटाएं, नई फ़ाइल का नाम बदलें, जोड़ें, कमिट करें?
हेंज

नहीं, फ़ाइल नाम में संशोधन संख्या के साथ इसे न सहेजें। इसे उसी फ़ाइल के नाम के ठीक उसी फ़ाइल नाम के साथ सहेजें (दूसरे शब्दों में, फ़ाइल नाम में कोई xxxx नहीं)। तो बस उसके बाद एक साधारण प्रतिबद्ध करते हैं।
ईलिंग

4

बस @ मिच डेम्पसी के उत्तर को जोड़ने के बाद से मेरे पास अभी तक टिप्पणी करने के लिए पर्याप्त प्रतिनिधि नहीं है।

svn export -r <REV> svn://host/path/to/file/on/repos --force

--फोर्स को जोड़ने से निर्यात के साथ स्थानीय कॉपी को अधिलेखित कर दिया जाएगा और फिर आप इसे रिपॉजिटरी पर धकेलने के लिए एक svn कमिट कर सकते हैं।


और यह सबसे अच्छा जवाब है :)
Zgr3doo

यह सबसे अच्छा जवाब क्यों है? यह इतिहास का प्रबंधन नहीं करता है "svn रास्ता"
जेसन एस

2

एक फ़ाइल के लिए एक वैकल्पिक विकल्प पुराने संशोधन के साथ फ़ाइल के वर्तमान संस्करण को "बदलना" है:

svn rm file.ext
svn cp svn://host/path/to/file/on/repo/file.ext@<REV> file.ext
svn ci

यह जोड़ा सुविधा है कि अवांछित परिवर्तन इस फ़ाइल (यानी svn लॉग file.ext) के लिए लॉग में नहीं दिखा है।


1

यदि आप किसी विशिष्ट संशोधन से एक व्यक्तिगत फ़ाइल वापस लेना चाहते हैं और कमिट कर सकते हैं, तो करें:

svn मर्ज -c - [OldRev #] [फ़ाइल नाम]

अर्थात। svn merge -c -150 myfile.py

संशोधन संख्या पर नकारात्मक ध्यान दें


-1
sudo svn revert filename

यह एकल फ़ाइल को वापस लाने का बेहतर तरीका है


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