इसे हटाने के बिना संस्करण नियंत्रण से किसी फ़ाइल को कैसे निकालना है?


132

यदि मैं चलाता हूं svn rm file, तो फ़ाइल को स्थानीय कार्य प्रतिलिपि से हटा दिया जाता है।

अब मैं क्या करूँ:

$ cp file file2
$ svn rm file
$ svn ci
$ mv file2 file

उपयोग करते समय मैं svn को स्थानीय फ़ाइल को हटाने से कैसे बचा सकता हूं svn rm?


जवाबों:


277

आप --keep-localकमांड लाइन विकल्प चाहते हैं। यह आपके फ़ाइल सिस्टम से हटाए बिना फ़ाइल को संस्करण नियंत्रण से हटा देता है।

$ svn rm --keep-local my_important_file

नोट:--keep-local केवल प्रभावित करता है svn rmअपनी कॉपी की। अन्य उपयोगकर्ताओं को हटाए गए फ़ाइल की अपनी स्थानीय प्रतिलिपि हो सकती है जब तक कि उनकी स्थानीय प्रतिलिपि और उनके द्वारा किए गए परिवर्तनों के कारण रिपॉजिटरी के बीच कोई संघर्ष न हो। यह वांछित परिणाम नहीं हो सकता है। नीचे टिप्पणी देखें।


4
अपडेट होने के बाद भी क्या वे अन्य लोगों के सिस्टम से इसे नहीं हटाएंगे?
Nyerguds

1
@Nyerguds यह सही है, क्योंकि svn rm रिपॉजिटरी से फाइलों को हटा रहा है। ऐसी स्थिति में जब आप रेपो से फ़ाइलें निकालना चाहते हैं, लेकिन BUT उन्हें अपनी मशीन पर स्थानीय रूप से रखेगा तो आप ऊपर दिए गए ध्वज का उपयोग करेंगे।
ग्रेग हिल्स्टन

6
@GregHilston जैसा कि मैंने कहा, हालांकि, यह वास्तव में कई प्रोग्रामर परियोजनाओं में मदद नहीं करता है। हर जगह सिर्फ फ़ाइल को अनवांट करने का एक तरीका होना चाहिए। यहां सबसे आम मामला स्थानीय सेटिंग्स की फाइलें गलती से (जावा प्रोजेक्ट्स में बहुत ही सामान्य) होती हैं, लेकिन उन्हें अनसुना करते हुए अन्य उपयोगकर्ताओं की सेटिंग्स फाइल को मिटा नहीं देना चाहिए।
Nyerguds 13:22 पर

5
@GregHilston "वास्तविक बहु-प्रोग्रामर परियोजनाएं" बल्कि "अन्य लोगों के सिस्टम" में निहित थी। समस्या यह है: अन्य लोग अपडेट करते हैं, और अपनी सेटिंग्स को अधिलेखित कर देते हैं। यह आमतौर पर बहुत समस्याग्रस्त नहीं है, लेकिन इसे सुलझाने के लिए पर्याप्त कष्टप्रद है। लेकिन उस बिंदु पर, जब वे पहले से ही सेटिंग्स को ओवरराइट कर चुके हैं और अब अपडेट पर एक svn "rm" प्राप्त करते हैं, यह वास्तव में उनके सिस्टम से संभावित-महत्वपूर्ण स्थानीय सेटिंग्स फ़ाइल को हटा देता है, जबकि यह सिर्फ अनवांटेड होना चाहिए ताकि इसे स्थानीय में कॉन्फ़िगर किया जा सके सेटिंग्स फिर से।
Nyerguds

4
किसी पुरानी फ़ाइल को रिपॉजिटरी से पुनः लोड करना उस पुराने संस्करण से होने के रूप में चिह्नित करता है, जिसका अर्थ है कि एक अपडेट बस इसे फिर से हटा देगा। ऐसा करने का कोई साफ तरीका नहीं है जिससे परियोजना में सभी मशीनों पर मैनुअल हस्तक्षेप की आवश्यकता न हो।
Nyerguds

13

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

svn rm --keep-local .classpath

पूरी तरह से एक मशीन पर काम करता है और उस समय में।

समस्या यह है कि अन्य मशीनें उस फ़ाइल को खो सकती हैं (अपडेट करने पर) या इसे फिर से जीवित करें (कमिट पर)। एसवीएन का दोष न --keep-localतो रिपॉजिटरी में संभालना है और न ही इसे अन्य कार्यशील प्रतियों में प्रचारित करना है। इसलिए कमांड के ऊपर अन्य सभी मशीनों को निष्पादित किया जाना चाहिए - किसी भी प्रतिबद्ध या अपडेट से पहले सबसे अच्छा।

यह, निश्चित रूप से, 90%, सबसे अच्छा काम करेगा। डिलीट और री-वर्जन अचानक से हो जाएगा। मेरा समाधान हर मशीन के पास है, मेरे पास प्रत्यक्ष या अप्रत्यक्ष रूप से पहुंच है, है

svn rm --keep-local .classpath
copy .classpath .classpath-nameOfTheMachine
svn add .classpath-nameOfTheMachine

यह शायद ही एक बदसूरत बदसूरत है जिसे "समाधान" कहा जाता है। फिर भी यह हमेशा किसी भी बाद की दुर्घटनाओं की त्वरित मरम्मत की अनुमति देता है।


-3

मेरे पास इस सटीक प्रश्न का उत्तर नहीं है, लेकिन मेरे पास संबंधित प्रश्न का उत्तर है, जो कि सभी फाइलों (यानी विशिष्ट एक नहीं) को स्थानीय रूप से हटाए बिना संस्करण नियंत्रण से निर्देशिका में निकालना है। यह समाधान एक वैज्ञानिक लिनक्स कार्यान्वयन से आता है।

ls -a .svn

svn निर्देशिका को दिखाना चाहिए जो डेटा को नियंत्रित करती है। सीधे शब्दों में:

rm -r .svn

इस निर्देशिका से छुटकारा मिलेगा। फिर टाइपिंग:

svn status

एक 'चेतावनी देगा: यह निर्देशिका कार्यशील प्रतिलिपि नहीं है' त्रुटि है, क्योंकि यह अब संस्करण नियंत्रण में नहीं है।

आशा है कि ये आपकी मदद करेगा।


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