2009-05-13 11 views
22

मेरे पास ~ 500,000 फ़ाइलों में फैले लगभग 15 जीबी डेटा के साथ एक बड़ा सबवर्जन रिपोजिटरी है। अब मुझे इस रिपोजिटरी को रिमोट होस्ट पर देखना होगा जिसमें पूरा होने में दिन लगेंगे।मैं स्थानीय फाइलों को बदले बिना किसी मौजूदा निर्देशिका को एक एसवीएन वर्किंग कॉपी (डब्ल्यूसी) में कैसे परिवर्तित करूं?

मेजबान मैं पहले से ही करने के लिए बाहर की जाँच कर रहा हूँ भंडार में डेटा की एक पूरी कॉपी है। लेकिन फाइलों को सीधे भंडार से चेक आउट नहीं किया गया था, इसलिए वे एक कार्यशील प्रतिलिपि नहीं बनाते हैं (नहीं ".svn" फ़ोल्डर्स)।

मैं नेटवर्क भर में यह सब डेटा की प्रतिलिपि से बचने के लिए, खासकर जब यह पहले से ही लक्ष्य मेजबान पर मौजूद चाहते हैं। क्या कोई चाल है जिसका उपयोग मैं कर सकता हूं जो एक पूर्ववर्ती निर्देशिका को स्थानीय फाइलों को भंडार से समान प्रतियों के साथ बदले बिना एक कार्यशील प्रतिलिपि में बदल देगा?

+0

बस जिज्ञासा से बाहर: क्या आपको लगता है कि भंडार में रख रहे हैं? मैंने कभी इस रिपो के बारे में कभी नहीं सुना है। – sleske

+2

कच्चे ऑडियो, ज्यादातर बोली जाने वाली शब्द। – weston

+0

यह कैसा लगता है कि "उन्हें साफ करने के बाद .svn निर्देशिकाएं कैसे प्राप्त करें" या "मैंने एक निर्यात किया जो दिन लेता था। लेकिन मैं .svn फ़ाइलों को भी चाहता था ..." – lilbyrdie

उत्तर

3

शरण लेनी आदेश नहीं है: http://svnbook.red-bean.com/en/1.1/re27.html

संपादित करें: स्थानीय फ़ाइलों भंडार से लिंक नहीं हैं हैं तो आप एक स्थानीय भंडार बना सकते हैं, इसे में फ़ाइलों को आयात और फिर शरण लेनी आदेश का उपयोग करें।

वैकल्पिक रूप से यदि आपके पास दोनों मशीनों तक भौतिक पहुंच है तो आप स्थानीय रूप से भंडार को देख सकते हैं और फिर फ़ाइलों को बाहरी एचडी के माध्यम से रिमोट मशीन पर कॉपी कर सकते हैं।

+0

मुझे नहीं लगता कि आप यहां कैसे स्थानांतरित कर सकते हैं। .svn फ़ोल्डरों में केवल मेटाडा को स्थानांतरित करें। ओपी के अनुसार कोई एसएसएन फ़ोल्डर्स नहीं हैं। –

+0

इसके लिए एक कामकाज के लिए मेरे संपादन देखें। –

+1

मुझे संदेह है कि यह काम करेगा, क्योंकि आप केवल एक ही भंडार के साथ एक भंडार में स्थानांतरित कर सकते हैं यूआईडी –

0

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

बेशक आपको .svn फ़ाइलों को स्थानांतरित करने के लिए किसी प्रकार की स्क्रिप्ट लिखनी होगी। यूनिक्स सिस्टम पर आप इसे ढूंढने और दोस्तों के साथ कर सकते हैं।

+0

-1 यदि उसके पास लगभग 500,000 फाइलें हैं, तो सभी एसएसएन फ़ोल्डरों को सावधानीपूर्वक ले जाने की कल्पना करें? –

+1

बेशक आप कुछ स्क्रिप्ट का उपयोग करेंगे। इस तरह की एक स्क्रिप्ट लिखते समय "सावधान" संभावित समस्या की चेतावनी देना था। – sleske

+0

मैंने इसे माना, लेकिन विक्टर ने बताया कि यह इतने बड़े रेपो के साथ बहुत कठिन हो सकता है। साथ ही, कार्यशील प्रतिलिपि के ".svn/text-base" फ़ोल्डर्स में रेपो में सभी फ़ाइलों की पुरानी प्रतियां होती हैं, इसलिए केवल .svn फ़ोल्डरों की प्रतिलिपि बनाने के लिए डेटा की पूरी प्रतिलिपि की आवश्यकता होगी। – weston

0

मुझे विश्वास नहीं है कि गंतव्य के लिए उन 15 जीबी स्थानांतरित किए बिना समाधान है। यह भंडार की प्रतिलिपि बनाने और स्थानीय चेकआउट करने के लिए शायद तेज़ और आसान होगा।

+0

अच्छा, हास्यास्पद आप इसका सुझाव देते हैं क्योंकि मैंने सर्वर पर केवल एक स्थानीय कामकाजी प्रति की जांच करने की कोशिश की। यहां तक ​​कि एक स्थानीय चेकआउट भी पूरा होने के लिए एक दिन से अधिक समय लेता है और इसमें रिमोट होस्ट पर एक नए भंडार में डंप/कॉपी/लोड करने में लगने वाला समय शामिल नहीं होगा। – weston

+0

इसका मतलब यह हो सकता है कि उपversण आपके लिए सही उपकरण नहीं है ... – Gleb

1

यदि आप पहले से कहीं नेटवर्क पर किसी और SVN के नियंत्रण में एक काम कर प्रति है rsync का उपयोग की कोशिश कर सकते।

+0

यह इतना बुरा विचार नहीं है, जैसा कि किसी अन्य टिप्पणी में उल्लिखित है, .svn/text-base फ़ोल्डर में आपकी सभी रिपो फ़ाइलों की पुरानी प्रतियां शामिल हैं , इसलिए rsync किसी भी तरह से सभी डेटा की प्रतिलिपि समाप्त हो जाएगा। आप संभवतः "टेक्स्ट-बेस" को दोहराने के लिए rsync को बता सकते हैं और फिर .svn फ़ोल्डर्स सिंक हो जाने के बाद "टेक्स्ट-बेस" को पॉप्युलेट करने के लिए कुछ स्क्रिप्ट कर सकते हैं। – weston

0

कोई भी मूल svn आदेश मैचों के लिए मौजूदा फ़ाइलों की जांच नहीं करेगा और उन्हें डाउनलोड नहीं करेगा।

भंडार तक पहुंचने के लिए आप किस प्रोटोकॉल का उपयोग कर रहे हैं? यदि यह https है, तो यह आपकी समस्या हो सकती है। देशी svn प्रोटोकॉल (svnserve का उपयोग कर), या svn + ssh का प्रयास करें। या शायद एक फ़ाइल के माध्यम से चेकआउट भी करें: svn repo होस्ट करने वाले सर्वर पर // URL, और नेटवर्क पर स्थानांतरित करने के लिए rsync का उपयोग करें।

तो जब तक आप कर रहे हैं नहीं प्रति-बाइट बैंडविड्थ के लिए का भुगतान, यह सिर्फ मतलब हो सकता है के तहत चलाए जाने के लिए "--force SVN सह" अच्छा या (Windows पर स्टार्ट/कम) और अपने खुद के बर्बाद नहीं पहर। यह स्थानीय फाइल सिस्टम पर चेकआउट प्रक्रिया के दौरान अनुपलब्ध नहीं होगा।

अंत में, मैं समझ नहीं क्यों अपने चेकआउट इतनी धीमी गति से होता है ... हम 500K फ़ाइल खजाने कि एक गीगाबिट लैन पर https के माध्यम से 6 में ~ मिनट चेकआउट किया है। अनुमोदित सभी फाइलें बहुत छोटी हैं (1 जीबी कुल)। विलंबता के मामले में सर्वर से कितने दूर हैं?

0

सर्वर पर एक चेकआउट करते हैं, स्थानीय में एक काम की नकल (सर्वर के लिए स्थानीय) बनाने, तो rsync कि मौजूदा निर्देशिका संरचना पर दूरस्थ सिस्टम प्रतिलिपि काम कर रहे।

सबवर्सन 1.7 का उपयोग करें, इस तरह फाइलों की पुरानी प्रतियों के साथ कोई एसएसएन नहीं है।

1

निम्न आदेश सभी .svn निर्देशिका को हटाना है।

chmod -R 0755 project_dir 
find /project_dir -type d -name .svn -exec rm -rf '{}' + 

आप पहले से ही एक चेकआउट संस्करण है, तो आप cp साथ rm की जगह उन .svn फ़ोल्डरों को कॉपी करने की कोशिश कर सकते हैं। मैंने हालांकि कोशिश नहीं की।

0

मेरे पास मेरे स्थानीय कंप्यूटर पर एक कामकाजी भंडार था जिसने ग्रहण दुर्घटनाग्रस्त होने पर अपने सभी एसएसएन फ़ोल्डरों को हटा दिया।

एक ही रास्ता मैं इसे दूरस्थ SVN भंडार से कनेक्ट करने में सक्षम था एक ब्लॉग मैंने पाया (Recovering a broken Subversion working copy) से इन चरणों का पालन करने के लिए किया गया था:

# Backup your project in case you run into trouble 
cp -Rp /path/to/project /temporary/location 

# Strip out the old .svn folders (if any) 
find /path/to/project -name .svn -print0 | xargs -0 rm -rf 

# Check out a clean copy 
svn co http://repo/location /temporary/location2 

# Move the .svn folders from the clean copy into the correct relative 
# place in the broken copy 
cd /temporary/location2 
find . -name .svn -print0 | xargs -0 -I {} mv '{}' '/path/to/project/{}' 

# Remove the clean copy 
rm -rf /temporary/location2 
23

SVN 1.7 के रूप में (लेकिन उससे पहले नहीं) आप के साथ आसानी से कर सकते हैं:

svn co --force http://path/to/repo

यह मौजूदा रूप में स्थानीय प्रति सम्मान करेंगे, और आप "ई" उत्पादन में प्रत्येक फ़ाइल नाम से पहले मौजूदा के लिए देख सकते हैं: E some/existing/file

तो फ़ाइल यह है कि शान से संभाल लेंगे भी the book के अनुसार भंडार से अलग (नई या संशोधित) है:

संस्करण 1.7 करने से पहले, सबवर्सन डिफ़ॉल्ट रूप से शिकायत करता है, तो आप की जाँच करने की कोशिश करेगा एक मौजूदा निर्देशिका के ऊपर एक निर्देशिका बाहर करें जिसमें फाइल या उपनिर्देशिकाएं हैं जो चेकआउट स्वयं ही बनाएंगे। सबवर्सन 1.7 इस स्थिति को अलग-अलग संभालता है, जिससे चेकआउट आगे बढ़ने की इजाजत मिलती है लेकिन पेड़ के संघर्ष के रूप में किसी भी अवरोधक वस्तुओं को चिह्नित किया जाता है। इस सुरक्षा को ओवरराइड करने के लिए --force विकल्प का उपयोग करें। जब आप --force विकल्प के साथ जांच करते हैं, चेकआउट लक्ष्य पेड़ में सामान्य रूप से किसी भी विचलित फ़ाइल जो चेकआउट को बाधित कर देगी, तब भी संस्करण बन जाएगी, लेकिन सबवर्जन इसकी सामग्री को संरक्षित रखेगा। यदि उन सामग्रियों को उस पथ पर रिपॉजिटरी फ़ाइल से अलग किया गया है (जिसे चेकआउट के हिस्से के रूप में डाउनलोड किया गया था), फ़ाइल में स्थानीय संशोधन दिखाई देंगे- आपके द्वारा चेक की गई पूर्ववर्ती फ़ाइल में आपके द्वारा चेक की गई संस्करण वाली फ़ाइल को बदलने के लिए आवश्यक परिवर्तन जब चेकआउट पूरा हो जाता है।

यह भी ध्यान दें कि एसवीएन 1.7 ऐसी स्थितियों का कारण बन सकता है जहां यह एक आम समस्या है (शायद समाधान को प्रेरित करती है)। डिस्क पर किसी नए स्थान पर उप निर्देशिका को स्थानांतरित करते समय मैंने इस समस्या को मारा। प्री-1.7 में जो .svn निर्देशिका को इसके साथ ले जायेगा और यह अकेले खड़ा होगा। 1.7 में निर्देशिका प्रभावी रूप से अपरिवर्तित हो गई। लेकिन svn co --force दिन बचाया।

+0

हालांकि, यह स्थानीय निर्देशिका में, फाइलें जो भंडार में थीं (यदि वे स्थानीय रूप से नहीं मिलती हैं) जोड़ती हैं। मैं इससे कैसे बच सकता हूं? और svn बताओ: यह नई कामकाजी प्रति है, इसके साथ सौदा! – yota

0

svn co --force https://PATH/TO/REPO/ .

कहाँ अंत में . मान लिया गया है आप पहले से ही निर्देशिका जो आप एक काम कर SVN कॉपी में चालू करना चाहते हैं अंदर हैं।

उदाहरणों के लिए, यदि आप अपने public_html निर्देशिका भंडार की एक काम SVN प्रतिलिपि बनाना चाहते थे:

cd /home/username/public_html; svn co --force https://PATH/TO/REPO/ .

+1

वर्तमान में स्वीकृत उत्तर से यह उत्तर बेहतर कैसे है, जिसमें एक ही जानकारी है? –

+0

स्वीकृत उत्तर वर्तमान निर्देशिका स्पष्ट अभिव्यक्ति के महत्व को छोड़ देता है। –

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