2011-10-03 14 views
7

किसी कारण से एसवीएन रेपो की मेरी स्थानीय प्रतिलिपि ने मूल निर्देशिका को एक कार्यशील प्रति के रूप में पहचानना बंद कर दिया। मैं सामान्य रूप से इसे किसी अन्य फ़ोल्डर में फिर से जांचकर और मेरी बदली गई फ़ाइलों के साथ नई कार्यशील प्रति को ओवरराइट करके ठीक कर दूंगा। मैं फिर नए फ़ोल्डर से एक प्रतिबद्धता करूँगा।एक एसवीएन चेकआउट की गहराई को

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

समस्या यह है कि एसवीएन जानता है कि मैंने केवल एक चेक आउट किया है कुछ फाइलें क्या कोई तरीका है कि मैं इसे नकली बना सकता हूं और एसवीएन सोचता हूं कि मैंने अभी पूर्ण चेकआउट किया है? (उदाहरण के लिए एक तरह से मैं वास्तव में सब कुछ बाहर की जाँच के बिना एक पूरा चेकआउट के लिए सिर्फ .svn फ़ोल्डर की पकड़ प्राप्त कर सकते हैं)

+0

पहले: कर रहे हैं काम कर रहे प्रतिलिपि की जड़ में या सीधे विशाल फ़ाइलें कम से कम एक निर्देशिका नीचे? दूसरा: क्या आपने '.svn' dir को केवल काम करने वाली प्रतिलिपि में हटा दिया था या क्या यह डीआईआर अन्य डीआईआर में भी गायब है? –

+0

फ़ाइलें teh मुख्य रूट में नहीं हैं, adn यह केवल रूट .svn निर्देशिका है जो दूषित है - किसी भी उपनिर्देशिका के भीतर सभी सामान्य आइकन फ़ाइलों के बगल में दिखाई देते हैं – wheresrhys

उत्तर

0

पहले बैकअप अपना पूरा काम करने की नकल। फिर अपनी कार्यशील प्रति को अंतिम संशोधन के लिए अपडेट करें। आपके अंतिम संशोधन में रूट फ़ोल्डर है। एसवीएन उस फ़ोल्डर को फिर से लिखने का प्रयास करेगा। फिर एक पेड़ संघर्ष दिखाएगा। फिर सफाई करें और इसे फिर से प्रतिबद्ध करें।

+0

मैं नवीनतम संशोधन के लिए अद्यतन नहीं कर सकता क्योंकि एसवीएन नहीं करता इसे एक कार्यशील प्रति के रूप में नहीं पहचानता है और मैं निर्देशिका – wheresrhys

1

आप सबसे अधिक संभावना क्षतिग्रस्त या हर चेकआउट के अंदर छिपा .svn फ़ोल्डर को हटाया।

कहीं और फ़ोल्डर को पुनर्स्थापित करने के लिए कमांड लाइन का उपयोग करें। फिर आपको उप-फ़ोल्डरों को मूल फ़ोल्डर के साथ दोबारा जोड़ने के लिए svn update . और svn cleanup अनुक्रमों के माध्यम से जाना होगा।

+0

पर किसी भी एसवीएन आदेश नहीं चला सकता हूं, मैंने पहले से ही कोशिश की है, लेकिन तत्काल जांच करना पूरी बात की जांच करने में लगता है - क्यों नहीं। यह मेरे लिए बहुत विपरीत लगता है। – wheresrhys

+1

फिर 'svn co svn: // your/svn/repository --depth खाली' और चेरी-इच्छित फ़ाइलों को चुनें। – aquaherd

0

केवल काम कर प्रतिलिपि की जड़ क्षतिग्रस्त हो गया है, तो और बड़ी (या कई फ़ाइलें) काम कर प्रति जड़ निम्न प्रक्रिया फिर से रेपो से फ़ाइलें डाउनलोड करने के बिना काम करना चाहिए नीचे निर्देशिका में हैं:

> # 1) adjust these: 
> WC=/bad/root/of/working/copy 
> REPO=svn://localhost/url/to/repo/trunk/proj 

> cd $WC 
> # 2) make sure there is no half-baked stuff 
> rm -rf .svn 

> # 3) remove files in WC-root (would wreck havok later) 
> rm -v $(svn ls --depth=files $REPO) 

> # 4) ckeck out a clean .svn for this dir into another place 
> svn co --depth=immediates $REPO /tmp/tmp-wc 
> # 5) copy .svn this to this place 
> cp -a /tmp/tmp-wc . 

> # 6) "reconnect" children, download files in root 
> svn up --set-depth=infinity . 
Revision 42. 

उस सामान्य ऑपरेशन के बाद संभव होना चाहिए - यदि कोई अन्य नुकसान नहीं है।

नोट्स:

  • चरण 3 + 4) के बाद से भंडार जड़ ज्यादा डेटा नहीं है, तो इस चरण दर्द रहित होना चाहिए। हालांकि यदि आप कोई परिवर्तन नहीं कर सकते हैं तो पहले आप इन्हें बैकअप ले सकते हैं।
  • चरण 6) चूंकि उपनिर्देशिका में डेटा छूटा हुआ है, इसलिए इसे दोबारा डाउनलोड नहीं किया जाएगा। रूट निर्देशिका में डेटा फिर से लाया जाएगा।
3

किसी नए स्थान पर आपके भंडार का एक स्पैस चेकआउट आपको जो चाहिए (http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html) करना चाहिए। अगर मैं आपको सही तरीके से समझता हूं, तो आप शीर्ष निर्देशिका का खाली चेकआउट करना चाहते हैं और फिर अपनी इच्छानुसार कलाकृतियों पर 'svn up' करना चाहते हैं, गहराई को सेट करते समय सेट करें।

उदाहरण के लिए, मान लीजिए कि मैं 'foo' नामक एक शीर्ष स्तरीय फ़ोल्डर डालते हैं और यह दो फोल्डर, 'बार' और 'zoog' में शामिल है।

/foo 
    /bar 
    -the files I want 
    /zoog 
    -the universe 

फ़ोल्डर 'zoog' फ़ाइलों है कि मैं इस समय के बारे में परवाह नहीं है की एक बड़ी संख्या है, लेकिन मैं 'बार' के साथ काम करने में सक्षम होना चाहता हूँ। मुझे क्या करना होगा निम्नलिखित:

svn co --depth empty file:///var/svn/repos/FooRepo foo 
cd foo 
svn up --set-depth infinity bar 

अब 'ऊपर svn' सब कुछ चलता अप टू डेट है और मैं 'foo' और 'बार' में बदलाव करने और उन्हें प्रतिबद्ध कर सकते हैं के रूप में अगर मैं यह भी जाँच की थी 'zoog' सभी उपरि के बिना।

(तर्क --set-गहराई तक SVN अद्यतन में को बाहर कर रहे हैं, खाली, फ़ाइलें, immediates, और अनंत)

+0

मैंने आपके उत्तर में एक जवाब दिया है जैसा कि ऐसा लगता है कि शायद मुझे इसकी आवश्यकता है, लेकिन कमांड लाइन svn (कछुआ गुई के बजाए) चलाने के लिए मैंने एसवीएन को 1.7 में अपग्रेड करना समाप्त कर दिया है, जिसमें एक पूरी तरह से अलग मेटाडेटा है संरचना v1.6, इसलिए मैं वास्तव में यह देखने के लिए आपके उत्तर का परीक्षण नहीं कर सकता कि यह – wheresrhys

+0

काम करता है या नहीं, मैं चरण तीन में 'svn up -set-depth infinity bar/folder1'' कहता हूं और त्रुटि प्राप्त करता हूं 'E155007 - एक कार्यशील प्रति नहीं' इसलिए मैं पहले 'svn up -set-depth खाली बार' कहता हूं, फिर 'svn up -set-depth infinity bar/folder1' –

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