2008-10-15 27 views
34

मुझे यकीन नहीं है कि यह कैसे हुआ, लेकिन किसी भी तरह से निर्देशिकाओं का एक पूरी तरह से खाली पदानुक्रम मेरे भंडार में समाप्त हो गया है:सीवीएस से खाली निर्देशिका निकालें?

com/ 
com/companyname/ 
com/companyname/blah/ 
com/sun/ 
com/sun/java/ 
com/sun/java/jax_rpc_ri/ 

मुझे लगता है कि क्या हुआ था कि इन निर्देशिकाओं में उनमें फाइलें थीं, लेकिन फिर डेवलपर को एहसास हुआ कि उसे पहले स्थान पर जांच नहीं करनी चाहिए क्योंकि ये निर्माण प्रक्रिया के उप-उत्पाद हैं, इसलिए उन्होंने फ़ाइलों को हटा दिया लेकिन किसी भी तरह रिक्त निर्देशिका को प्राचीन अवशेष के रूप में भंडार में छोड़ दिया गया है।

मैं इसे सीवीएस से कैसे हटा सकता हूं? Google पर खोजने के लिए मुझे लगता है कि एकमात्र परिणाम कहता है कि रिक्त निर्देशिका को हटाने की आवश्यकता नहीं होनी चाहिए क्योंकि सीवीएस उन्हें पहले स्थान पर नहीं रखेगा, और -P (prune) विकल्प cvs update को हटा देना चाहिए उन्हें कार्यशील निर्देशिका से - जो शून्य की सहायता है यदि आपके पास वास्तव में आपके भंडार में खाली निर्देशिका है।

एक cvs remove और cvs commit इस स्थिति का ख्याल नहीं रखता है:

$ cvs remove -Rf com 
cvs remove: Removing com 
cvs remove: Removing com/companyname 
cvs remove: Removing com/companyname/blah 
cvs remove: Removing com/sun 
cvs remove: Removing com/sun/java 
cvs remove: Removing com/sun/java/jax_rpc_ri 
$ cvs commit com 
cvs commit: Examining com 
cvs commit: Examining com/companyname 
cvs commit: Examining com/companyname/blah 
cvs commit: Examining com/sun 
cvs commit: Examining com/sun/java 
cvs commit: Examining com/sun/java/jax_rpc_ri 
$ ls -l com 
total 24 
drwxrwxr-x 2 matt matt 4096 Oct 15 14:38 CVS 
drwxrwxr-x 9 matt matt 4096 Oct 15 14:38 companyname 
drwxrwxr-x 4 matt matt 4096 Oct 15 14:38 sun 

यह अभी भी है!

क्या एसवीएन में यह अजीब व्यवहार भी है?

उत्तर

36

AFAIK सीवीएस प्रोटोकॉल निर्देशिका को हटाने की अनुमति नहीं देता है। आपको सर्वर कंसोल पर जाना चाहिए और उन्हें वास्तविक भौतिक भंडार से हटा देना चाहिए।


http://www.network-theory.co.uk/docs/cvsmanual/Removingdirectories.html

आप निर्देशिका खुद को दूर नहीं करते, ऐसा करने का कोई तरीका नहीं है।

+4

चेतावनी! वास्तविक, भौतिक, भंडार में जाना जरूरी है क्योंकि एक बार सीवीएस एक निर्देशिका खो देता है, यह इसे फिर से वापस नहीं ले सकता है। सीवीएस उन फाइलों को स्टोर करता है जिन्हें 'अटिक' नामक विशेष फ़ोल्डरों में मिटा दिया गया है। यदि आप 'Attic' मिटाते हैं तो उन फ़ाइलों को हमेशा के लिए खो दिया जाता है। –

+1

ऐसा कुछ करने से पहले हमेशा दो बार सोचें, लेकिन मुझे कोई समस्या नहीं दिख रही है: 'ssh cvsserver:/cvsroot 'tar cvf com.tar com'; 'एसपीपी cvsserver: /cvsroot/com.tar .'; 'सीवीएस com.tar' जोड़ें; 'सीवीएस सीआई com.tar'; 'सीवीएस आरएम-एफ com.tar'; 'ssh cvsserver:/cvsroot 'rm -rf com.tar com'' – minopret

20

सीवीएस चेकआउट और अपडेट हमेशा खाली निर्देशिकाओं की जांच करेगा; यही कारण है कि सीवीएस बनाया गया है। "छँटाई" - - "-पी" के साथ एक अद्यतन है खाली निर्देशिका दूर करने के लिए:

cvs update -dP 

(जोड़ना "-d" नया निर्देशिका है कि आपके अंतिम अपडेट के बाद दिखाई दिया अपडेट करेगा, अन्यथा, सीवीएस पर ध्यान नहीं देगा उन्हें।)

+4

यह केवल कार्यशील प्रतिलिपि से रिक्त निर्देशिका को हटा देता है - मैं उन्हें भंडार से हटाना चाहता हूं। –

1

सीवीएस निर्देशिकाओं के संबंध में दो चरण दृष्टिकोण पर काम करने के लिए काम करता है, इसलिए कई सीवीएस आदेशों के लिए "खाली निर्देशिकाओं को छिपाने" के लिए ए-पी विकल्प है।

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

काम किया।

यदि मैंने किया है, तो मैं सुनिश्चित करता हूं कि मेरा वर्तमान कार्यक्षेत्र जिसमें खाली निर्देशिका/ies शामिल है, सभी में चेक किया गया है। फिर मैं उस कार्य क्षेत्र का हिस्सा निकाल देता हूं जिसमें मैंने निर्देशिकाएं जोड़ दी हैं।

उदाहरण के लिए,

~/Sandbox/my_project/some_stuff_i_want 
~/Sandbox/my_project/empty_dir_1 
~/Sandbox/my_project/other_stuff_i_want 

में मुझे यकीन है कि सब कुछ दोनों सामान मैं रखना चाहते युक्त निर्देशिका में अप टू डेट है बनाते हैं। मैं फिर अपने सैंडबॉक्स के भीतर से my_project दूर उड़ाने।

फिर मैं रिकॉर्ड्स से खाली निर्देशिका हटा देता हूं।

वापस जाकर और उसी कार्य क्षेत्र की जांच करना, उदा। my_project मुझे खाली dirs के बिना कार्य क्षेत्र दे देंगे।

या बस सबकुछ छोड़ दें और सीवीएस को सबकुछ जांचने के लिए -पी विकल्प का उपयोग करें (या सबकुछ अपडेट करें), फिर खाली डीआईआर को बाहर निकालें।

HTH

चियर्स,

रोब

+0

धन्यवाद। इसने मुझे काम पर कुछ idjut द्वारा किए गए नुकसान पूर्ववत करने में मदद की। – Tanktalus

4

सीवीएस कभी नहीं के बिना इतिहास को खो देने से एक है एक निर्देशिका से छुटकारा पाने के लिए सक्षम होने, डिजाइन दोषों की एक संख्या है। इतिहास खोने के बिना फ़ाइलों और निर्देशिकाओं का नाम बदलने में कठिनाई एक और है।

Subversion पर स्नातक होने पर विचार करें। cvs2svn सभी शाखाओं और टैग सहित भंडारों को परिवर्तित करने में बहुत अच्छी नौकरी करता है। सीवीएस और एसवीएन कमांड सेट बहुत समान हैं और न्यूनतम समायोजन की आवश्यकता है। (और जब आप एसवीएन का उपयोग कर रहे हों तो यह "आप किस संस्करण नियंत्रण का उपयोग करना चाहिए" युद्ध बनने के लिए आगे बढ़ने के लिए आप git या SVK जैसे किसी भी उन्नत संस्करण नियंत्रण प्रणाली पर जा सकते हैं।

7

बस

किया
  1. rm -rvf/localCopy/परियोजना/emptyDirectory
  2. संपादित करें/localCopy/परियोजना/सीवीएस/प्रविष्टियां, लाइन डी/emptyDirectory ////, बचाने फ़ाइल
  3. rmdir हटाना -v/CVSROOT/प्रोजेक्ट/खाली डायरेक्टरी

परियोजना में खाली निर्देशिका से छुटकारा पाने के लिए। आंतरिक सीवीएस डेटा के साथ गड़बड़ करने के लिए वैध नहीं है, लेकिन ऐसा लगता है कि काम किया है (सीवीएस संस्करण 1.12.13)।

4

यह मेरे लिए काम किया। असल में जब आप

rmdir -v/CVSROOT/project/blankDirectory # हम सीवीएस रिपोजिटरी निर्देशिका से निर्देशिका हटा रहे हैं।

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

1

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

संबंधित मुद्दे