SVN चेकआउट में स्थानीय परिवर्तन कैसे छोड़ें?


197

मैं एक प्रस्तुत करना चाहता था diff एक ओपन सोर्स प्रोजेक्ट के लिए, समीक्षा के लिए।

मुझे SVN (टर्मिनल, उबंटू से) का उपयोग करके कोड मिला। और मैंने कुछ फाइलों में मामूली संपादन किया। अब केवल एक ही बदलाव है जिसे मैं प्रस्तुत करना चाहता हूं। मेरे द्वारा किए गए बाकी बदलाव, डिबगिंग के लिए थे, और अब इसकी आवश्यकता नहीं है।

मैं का उपयोग कर अलग उत्पन्न किया है svn di > ~/os/firstdiff.diff

तो मेरा प्रश्न, मेरे स्थानीय परिवर्तनों को कैसे छोड़ें?

वहाँ यह करने के लिए एक SVN तरीका है? यदि नहीं, तो मुझे प्रत्येक फ़ाइल पर जाना होगा और अपने सभी संपादन हटाने होंगे। तब मैं एक नया अंतर उत्पन्न करता, और उसे प्रस्तुत करता।

जवाबों:


253

svn revertउदाहरण के लिए, केवल कमांड का उपयोग करें :

svn revert some_file.php

यह (प्रत्येक अन्य svn कमांड के रूप में) अच्छी तरह से svnbook संसाधन या मैन पेज में या यहां तक ​​कि svn helpकमांड के साथ प्रलेखित है ।


2
सिवाय इसके कि विनायक अपने स्थानीय निर्बाध परिवर्तन को अपने लिए रखना चाहते हैं।
बेसिल स्टेयरनेविच

2
@BasileStarynkevitch: मैंने प्रश्न को फिर से पढ़ा है, और ऐसा लगता है कि अन्य परिवर्तनों की आवश्यकता नहीं है: "" मेरे द्वारा किए गए बाकी बदलाव, मूल रूप से डिबगिंग के लिए थे, और अब आवश्यक नहीं हैं। "" ":)
Cddric जुलिएन

1
हां ... लेकिन वह उन्हें अपने लिए और आगे रखना चाहता था ... (उसके सवाल को दोनों तरह से समझा जा सकता है)।
बेसिल स्टायरनेविच

193

आपको svn रिवर्ट कमांड का उपयोग करके सभी परिवर्तनों को वापस करना होगा :

  • फ़ाइल में परिवर्तन वापस करें: svn revert foo.c
  • फ़ाइलों की पूरी निर्देशिका वापस करें: svn revert --recursive .

1
svn 1.1 का संदर्भ थोड़ा पुराना है, इस तथ्य के बावजूद कि यह Google द्वारा दी गई पहली कड़ी है ;)
सेड्रिक जुलिएन

स्पष्ट रूप से आपके फ़ाइल नाम के कुछ पात्रों को अनदेखा किया जा सकता है। उदाहरण के लिए icon@2x.png svn revert icon@2x.png svn का कहना है कि छोड़ दिया 'चिह्न'।
topwik

1
यह सबसे अच्छा जवाब है। इसकी जांच होनी चाहिए।
रिकोफोसुसा

12
svn revert --recursive .मुझे मदद करता है एक बहुत
पॉल वर्गास

यह स्वीकृत उत्तर होना चाहिए, क्योंकि --recursiveपैरामीटर किसी भी स्थानीय परिवर्तन को प्रभावित करता है और यह सवाल है।
अरुकेउर

15

एक विशेष फ़ाइल में स्थानीय परिवर्तनों को छोड़ने के लिए:

$ svn revert example_directory/example_file.txt

एक विशेष फ़ोल्डर में स्थानीय परिवर्तनों को छोड़ने के लिए:

$ svn revert -R example_directory/

7

svn revertमूल पोस्टर के लिए सरल पर्याप्त था। हालांकि, एक साधारण svn revertअधिक सामान्य मामले में नहीं करेगा जहां आप

  1. दोनों संपादन जो आप साझा करना चाहते हैं और वे संपादन जो आप एक ही फ़ाइल में साझा नहीं करना चाहते हैं ,
  2. है स्थानीय परिवर्तन है कि आप अभी भी अपने निजी लाभ के लिए रखते हुए में रुचि रखने वाले रहे हैं

@ ErichBSchulz का उपयोग करने का सुझाव git add -pबहुत ही उचित है और इस तरह के मामले में आम तौर पर लागू होता है। जवाब सिर्फ कुछ विवरण की कमी थी। अपनी वर्तमान निर्देशिका को मानते हुए वह निर्देशिका है जिसे आप साझा करने योग्य पैच बनाना चाहते हैं, आप कुछ इस तरह से कर सकते हैं:

  1. तोड़फोड़ से एक अलग निर्देशिका के लिए प्राचीन संस्करण चेकआउट (एक निर्देशिका नाम है कि मौजूद नहीं है चुनें, यहाँ उपनिर्देशिका का उपयोग कर TMP/)।

    $ url=$(svn info . | awk '/^URL/ {print $2}')
    $ svn checkout "$url" TMP
    
  2. एक आधार के रूप में उस प्राचीन svn चेकआउट का उपयोग करते हुए, एक git रिपॉजिटरी, init .svn निर्देशिकाओं को सम्मिलित करें। अपने अस्थायी गिट रिपॉजिटरी में सब कुछ सिर के लिए प्रतिबद्ध करें

    $ cd TMP                                                     
    $ git init && echo ".svn/" > .gitignore
    $ git add -A && git commit
    $ cd ..
    
  3. अपनी मूल वर्किंग डायरेक्टरी में नए तैयार किए गए रिपॉजिटरी मेटा डेटा को कॉपी करें; जैसा कि प्राचीन तोड़फोड़ चेकआउट निर्देशिका की जरूरत नहीं है, आप इससे छुटकारा पा सकते हैं। आपकी वर्किंग डायरेक्टरी अब गिट और तोड़फोड़ दोनों रिपोजिटरी है:

    $ mv TMP/.git .
    $ rm -rf TMP/
    
  4. अब आप शक्तिशाली और सुविधाजनक git add -pका उपयोग करके अंतःक्रियात्मक रूप से चयन कर सकते हैं कि आप क्या साझा करना चाहते हैं, और उन्हें अपने गिट भंडार के लिए प्रतिबद्ध करें। यदि आपको कमिट में फाइल जोड़ने की आवश्यकता है, तो git add <file-to-add>पहले भी करेंgit commit

    $ git add -p                            
    <interactively select (and edit) the chunks you want to share>
    $ git add ${the_list_of_files_not_in_yet_in_svn_you_want_to_add}
    $ git commit
    
  5. प्रतिबद्ध का उपयोग करके, एक पैच तैयार करें जिसे आप साझा करना चाहते हैं। इस प्रयोजन के लिए, आप भी उपयोग कर सकते हैं git diff HEAD^..HEAD, या git format-patch(बाद वाले को सीधे ईमेल भेजने के लिए इस्तेमाल किया जा सकता है जिसमें पैच या एकाधिक पैच शामिल हैं):

    $ git show -p HEAD > my-mighty-patch.patch
    

गिट मेटा डेटा से छुटकारा पाने के लिए, बस करो rm -rf .git/। यदि आप मूल कार्य निर्देशिका के साथ हैकिंग जारी रखने की योजना बनाते हैं, तो आप gitअपने स्थानीय परिवर्तनों को प्रबंधित करने के लिए उपयोग करना जारी रख सकते हैं। इस मामले में आप शायद सीखने के निवेश से लाभान्वित होंगे कि कैसे उपयोग करेंgit svn

नोट: यदि आप इससे परिचित हैं तो gitसुधार करने के लिए तुच्छ वस्तु है। अन्यथा यह शायद थोड़ा गड़बड़ लगता है। आप svn के लिए एक "इंटरैक्टिव कमिट" या "इंटरेक्टिव पैच निर्माण" को लागू करने के लिए इन चरणों में से एक स्क्रिप्ट लिखकर दृष्टिकोण को सामान्य कर सकते हैं जो कि बिना समझ के किसी भी उपयोग किया जा सकता है।


3
बिना किसी स्पष्टीकरण के अनाम -1 के लिए बहुत-बहुत धन्यवाद। किसी भी तरह से, मैंने इस दृष्टिकोण को स्पष्ट करते हुए उत्तर को बेहतर बनाने के लिए समय लिया।
FooF

2
विस्तार के लिए बहुत बहुत धन्यवाद। मुझ से +1! चिंता मत करो। उपद्रवी भीड़।
ErichBSchulz

1
अंगूठे के लिए धन्यवाद, @ErichBSchulz! धीरे-धीरे हम दुनिया को प्रतिकूलताओं के बावजूद बेहतर जगह बना रहे हैं !!! ;-)
FooF

4

आप उपयोग कर सकते हैं

 svn diff important/file1.c important/file2.c > $HOME/os/firstdiff.diff

अपना अंतर प्रकाशित करते समय, उस संशोधन को बताना न भूलें जिसके खिलाफ आप अलग-अलग हैं।

जैसा कि दूसरों ने उत्तर दिया, आप svn revertसावधानीपूर्वक उपयोग कर सकते हैं । यह निर्भर करता है कि आप अपने भविष्य के काम के लिए अपने स्थानीय बदलावों को रखना चाहते हैं या नहीं ...


+1 यह समस्या का सबसे अच्छा समाधान है, लेकिन इस मामले में मैं वास्तव में अपने सभी परिवर्तनों से छुटकारा पाना चाहता था। बेशक, मैं revertहर समय अपने बदलाव नहीं करना चाहूंगा । इसलिए मैं भविष्य में आपके रास्ते का उपयोग करूंगा।
विनायक गर्ग

3

उस रिपॉजिटरी के मूल में जाएं और निम्न कमांड चलाएं

svn revert --depth=infinity .

1
svn revert -R .छोटा हो सकता है
jesjimher

1

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

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