मैं एक तोड़फोड़ भंडार को कैसे निर्यात (और फिर आयात) कर सकता हूं?


82

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

मैं ऐसा कैसे कर पाऊंगा?

जवाबों:


69

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

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

आप यहां डंप / लोड प्रक्रिया के बारे में अधिक पढ़ सकते हैं:

http://svnbook.red-bean.com/en/1.8/svn.reposadmin.maint.html#svn.reposadmin.maint.migrate

इसके अलावा, यदि आप ऐसा करते हैं svnadmin load, तो सुनिश्चित करें कि आप --force-uuidविकल्प का उपयोग करते हैं , या अन्यथा लोगों को नई रिपॉजिटरी पर स्विच करने में समस्या आ रही है। आंतरिक रूप से रिपॉजिटरी की पहचान करने के लिए सबवर्सन एक यूयूआईडी का उपयोग करता है, और यह आपको एक काम करने वाली कॉपी को एक अलग रिपॉजिटरी में स्विच नहीं करने देगा।

यदि आपके पास फ़ाइल सिस्टम एक्सेस नहीं है, तो आपके द्वारा माइग्रेट करने में मदद करने के लिए अन्य थर्ड पार्टी विकल्प हो सकते हैं (या आप कुछ लिख सकते हैं): अनिवार्य रूप से आपको नए रिपॉजिटरी पर प्रत्येक संशोधन को दोहराने के लिए svn लॉग का उपयोग करना होगा, और फिर मेटाडेटा को बाद में ठीक करें। आपको ऐसा करने के लिए पूर्व-पुन: क्रॉप-परिवर्तन और पोस्ट-रेप्रॉप-परिवर्तन हुक लिपियों की आवश्यकता होगी, जो कि फाइलसिस्टम अभिगम ग्रहण करता है, इसलिए YMMV। या, यदि आप इतिहास नहीं रखना चाहते हैं, तो आप नई रिपॉजिटरी में आयात करने के लिए अपनी वर्किंग कॉपी का उपयोग कर सकते हैं। लेकिन उम्मीद है कि यह मामला नहीं है।


28
1.7 के बाद से, आप अब svnrdump को देख सकते हैं, जिसे दूरस्थ रिपोज पर व्यवस्थापक अधिकारों की आवश्यकता नहीं है। कमान आसान है svnrdump dump https//remote/svn/trunk > repos.dump:। ज्यादातर मामलों में, कमांड SVN 1.6 के साथ भी काम करता है, लेकिन इसमें कुछ समस्याएँ हो सकती हैं, डॉक्स देखें। दोनों निक्स और विंडोज में काम करता है।
हाबिल

34

rsvndump मेरे लिए बहुत बढ़िया काम किया है कि svnrepository.com से एक रिपॉजिटरी को उबंटू सर्वर पर नियंत्रित करता हूं जिसे मैं नियंत्रित करता हूं।

उबंटू पर rsvndump को कैसे स्थापित करें और उपयोग करें:

  1. गुम निर्भरताएँ स्थापित करें ("APR" और तोड़फोड़ पुस्तकालय)

    sudo apt-get install apache2-threaded-dev
    sudo apt-get install libsvn-dev
    
  2. Rsvndump स्थापित करें

    wget http://prdownloads.sourceforge.net/rsvndump/rsvndump-0.5.5.tar.gz
    tar xvfz rsvndump-0.5.5.tar.gz
    cd rsvndump-0.5.5
    ./configure
    make
    sudo make install
    
  3. दूरस्थ SVN रिपॉजिटरी को एक स्थानीय फ़ाइल में डंप करें

    rsvndump http://my.svnrepository.com/svn/old_repo > old_repo_dump
    
  4. एक नया रिपॉजिटरी बनाएं और स्थानीय डंप फ़ाइल में लोड करें

    sudo svnadmin create /opt/subversion/my_new_rep
    sudo svnadmin load --force-uuid /opt/subversion/my_new_repo < old_repo_dump
    

7
फिर, एक मौजूदा काम की प्रतिलिपि माइग्रेट करने के लिए: svn switch --relocate http://my.svnrepository.com/svn/old_repo http://newserver.com/svn/my_new_repo
tkdave

क्या वास्तव में बल-uuid विकल्प है? क्या यह स्रोत या कुछ और से निर्देशिका अनुमतियों की प्रतिलिपि बनाता है?
मोंटागुइल

1
यूयूआईडी एक भंडार "सार्वभौमिक अद्वितीय पहचानकर्ता" है। जब तक UUID का मिलान न हो आप स्थानांतरित किए गए भंडार में नहीं जा सकते। ध्यान दें, यह भी संभव है कि बाद में svnadmin setuuid कमांड के साथ UUID सेट करें।
tkdave


9

मेरे ब्लॉग-नोट-से-स्वयं के अंश :

यदि आप मशीनों / तोड़फोड़ संस्करणों के बीच पलायन कर रहे हैं तो अब आप एक डंप फ़ाइल को आयात कर सकते हैं। जैसे अगर मैंने स्रोत रिपॉजिटरी से एक डंप फ़ाइल बनाई थी और इसे नीचे दिखाए गए अनुसार नए रिपॉजिटरी में लोड किया था।

यूनिक्स जैसी प्रणालियों के लिए कमांड (टर्मिनल से):

svnadmin dump /path/to/your/old/repo > backup.dump
svnadmin load /path/to/your/new/repo < backup.dump.dmp

Microsoft Windows सिस्टम के लिए कमांड (cmd शेल से):

svnadmin dump C:\path\to\your\old\repo > backup.dump
svnadmin load C:\path\to\your\old\repo < backup.dump

5

ऐसा करने के लिए उपकरण होगा

svnadmin dump

लेकिन इसके लिए काम करने के लिए, आपको रिपॉजिटरी में फाइलसिस्टम-एक्सेस की आवश्यकता है। और एक बार आपके पास (और रिपॉजिटरी एफएसएफएस प्रारूप में है) प्रदान करने के बाद, आप रिपॉजिटरी को उसके नए स्थान पर कॉपी कर सकते हैं (यदि यह बीडीबी प्रारूप में है, तो डंप / लोड दृढ़ता से अनुशंसित है)।

यदि आपके पास फ़ाइल सिस्टम एक्सेस नहीं है, तो आपको अपने रिपॉजिटरी प्रदाता से आपके लिए डंप प्रदान करने के लिए कहना होगा (और उन्हें अपने रिपॉजिटरी को हटाने के लिए कहें - और उम्मीद है कि वे अनुपालन करें)


5

यदि आपके पास रिपॉजिटरी में फाइल एक्सेस नहीं है, तो मैं डंप फाइल बनाने के लिए rsvndump (रिमोट सबवर्सन रिपॉजिटरी डंप) पसंद करता हूं


मैंने सीखा कि यह कठिन तरीका है कि आज नया svns लगता है कि पुराने repos भ्रष्ट हैं। डंप का उपयोग करके इसे हल किया।
उल्लू

4

मूल रूप से, कार्य को पूरा करने के बहुत सारे तरीके हैं। विषय SVNBook में गहराई से कवर किया गया है माइग्रेटिंग रिपॉजिटरी डेटा कहीं और , इसलिए मैं पुस्तक के अनुभाग को पढ़ने का सुझाव देता हूं।

आपके विकल्पों का संक्षिप्त विवरण इस प्रकार है:

  • यह आपके वातावरण पर निर्भर करता है, लेकिन एक बहुत अच्छा मौका है कि आप नए सर्वर पर रिपॉजिटरी को कॉपी कर सकते हैं और यह काम करेगा। आपको यह सुनिश्चित करने के लिए कि वे आपकी अपेक्षा के अनुसार काम कर रहे हैं, रेपो की प्रतिलिपि बनाने के बाद रिपॉजिटरी हुक स्क्रिप्ट को संशोधित करना होगा।

  • आप , एह का उपयोग कर सकते हैं svnadmin dumpऔर svnadmin loadपूर्ण डंप उत्पन्न कर सकते हैं और फिर इसे दूसरे सर्वर पर किसी अन्य रिपॉजिटरी में लोड कर सकते हैं। svnadmin createइसमें डंप लोड करने के लिए आपको एक नए स्वच्छ भंडार की आवश्यकता होगी । ध्यान रखें कि दृष्टिकोण केवल रिपॉजिटरी इतिहास से संबंधित है और हुक स्क्रिप्ट और रिपॉजिटरी कॉन्फ़िगरेशन फ़ाइलों को स्थानांतरित नहीं करता है ! साथ ही, आपने इसे डंप करने के लिए मूल रिपॉजिटरी में फाइल सिस्टम एक्सेस पढ़ा होगा।

  • सबवर्सन 1.7 के बाद से svnrdumpटूल उपलब्ध है। सामान्यतया, यह नकल करता है svnadmin dumpऔर svnadmin loadकार्यक्षमता, लेकिन दूर से काम करता है। मूल और लक्ष्य रिपॉजिटरी में फाइलसिस्टम एक्सेस को पढ़ने / लिखने के लिए आपको आवश्यक नहीं है क्योंकि टूल एचटीटीपीएस प्रोटोकॉल पर सबवर्सन क्लाइंट की तरह दूरस्थ रूप से संचालित होता है। इसलिए आपको मूल रिपॉजिटरी तक पढ़ने और लक्ष्य को पढ़ने / लिखने की आवश्यकता है।

  • एक अन्य विकल्प svnadmin hotcopyकमांड का उपयोग करना है । कमांड का उपयोग ज्यादातर बैकअप उद्देश्य के लिए किया जाता है, यह कॉन्फ़िगरेशन और हुक स्क्रिप्ट सहित रिपॉजिटरी की पूरी प्रतिलिपि बनाता है। आप किसी अन्य सर्वर पर हॉटकॉपिड रिपॉजिटरी स्थानांतरित कर सकते हैं।


4

आप svnadmin hotcopyकमांड का उपयोग भी कर सकते हैं :

svnadmin hotcopy OLD_REPOS_PATH NEW_REPOS_PATH

यह रिपॉजिटरी से पूर्ण बैकअप लेता है, जिसमें सभी हुक, कॉन्फ़िगरेशन फाइलें, आदि शामिल हैं।

SVN बुक में अधिक


1
वास्तव में, यह svnADMIN हॉटकॉपी है। जिसका अर्थ है कि इसके लिए रिपॉजिटरी फाइलसिस्टम एक्सेस की भी आवश्यकता होगी!
पायलट

3

मान लें कि आपके पास svnadmin को चलाने के लिए आवश्यक विशेषाधिकार हैं, आपको डंप और लोड कमांड का उपयोग करने की आवश्यकता है ।


3

मुझे एक होस्टिंग सेवा से दूसरे में svn रिपॉजिटरी को स्थानांतरित करने के तरीके के बारे में एक लेख मिला, और स्थानीय बैकअप कैसे करें:

  1. परिभाषित करें कि आप अपनी रिपॉजिटरी कहाँ स्टोर करेंगे:

    mkdir ~/repo
    MYREPO=/home/me/someplace ## you should use full path here
    
  2. अब एक खाली svn रिपॉजिटरी बनाएं svnadmin create $MYREPO
  3. एक हुक फ़ाइल बनाएँ और इसे निष्पादन योग्य बनाएं:

    echo '#!/bin/sh' > $MYREPO/hooks/pre-revprop-change
    chmod +x $MYREPO/hooks/pre-revprop-change
    
  4. अब हम रिपॉजिटरी को आयात करना शुरू कर सकते हैं svnsync, जो दूसरे रिपॉजिटरी से सिंक्रोनाइज़ेशन के लिए एक गंतव्य रिपॉजिटरी को इनिशियलाइज़ कर देगा:

    svnsync init file://$MYREPO http://your.svn.repo.here/
    
  5. और जिस स्रोत से इसे आरंभ किया गया था, उस गंतव्य तक सभी लंबित संशोधनों को स्थानांतरित करने के लिए परिष्करण स्पर्श:

    svnsync sync file://$MYREPO
    

अब आपके पास ~/repoनिर्देशिका में एक स्थानीय svn भंडार है ।

स्रोत:


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