2008-10-15 16 views
12

हम अपने एसवीएन रिपॉजिटरीज को एक मशीन से दूसरे मशीन पर ले जाने की प्रक्रिया में हैं, और इसके साथ ही नए रेपो के लिए एक नया डोमेन नाम आएगा। समस्या यह है कि, भंडार के भीतर, बहुत सारे svn हैं: भंडार के भीतर अन्य परियोजनाओं के बाहरी संदर्भ। तो उदाहरण के लिए, हमारे पास प्रोजेक्ट ए है, जो svn में है: बाहरी गुण:svn में सभी यूआरएल कैसे माइग्रेट करें: एक भंडार में बाहरी गुण?

external/libraryA svn://oldserver.net/repo/libraryA 
external/libraryB svn://oldserver.net/repo/libraryB 

... और इसी तरह। यूआरएल के सभी संदर्भ इस विशेष डोमेन नाम का संदर्भ देते हैं, इसलिए इसे आसानी से पार्स किया जा सकता है। मेरे पाठ को पहले से ही सीखने के बाद, मैं इन यूआरएल को "svn: // localhost /" होने के लिए माइग्रेट कर दूंगा, लेकिन मुझे रिपोजिटरी इतिहास के माध्यम से जाने और पुराने यूआरएल को फिर से लिखने का एक तरीका ढूंढना होगा, ताकि हम अभी भी जांच सकें टूटी हुई लिंक के बिना इन परियोजनाओं के पुराने संशोधन।

मैं यह करने के बारे में कैसे जाउंगा?

+2

क्या विशेष पाठ यह आप "SVN: // स्थानीय होस्ट /" के साथ संदर्भ दे रहे है -thing? – conny

+0

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

+4

मुझे svn: // localhost उपसर्ग का उपयोग करने की आवश्यकता नहीं दिखाई देती है। क्या आप जानते हैं कि आप रिश्तेदार यूआरएल का उपयोग कर सकते हैं? Http://subversion.tigris.org/svn_1.5_releasenotes.html#externals –

उत्तर

7

जैसा कि आपने संकेत दिया है कि आप अभी भी पुराने संशोधन की जांच करने में सक्षम होना चाहते हैं, एकमात्र समाधान वास्तव में पूरे इतिहास को "पुनः लिखना" है (पहले उल्लिखित समाधान डी)।

ऐसा करने के लिए, आप चाहिए:

1) पूरे भंडार की सामग्री svnadmin dump का उपयोग कर डंप:

$ svnadmin dump /path/to/repos > original-dumpfile 
* Dumped revision 0. 
* Dumped revision 1. 
* Dumped revision 2. 
* Dumped revision 3. 

2) SVN बदलने के लिए डंप फ़ाइल संपादित करें,: बाहरी यूआरएल । यह सबसे कठिन हिस्सा है: रिपॉजिटरी को मानते हुए बाइनरी डेटा भी होता है, एक सादा पाठ संपादक में डंप फ़ाइल खोलने से डंप फ़ाइल को दूषित कर दिया जाएगा। मैं अच्छा अनुभवों उदाहरण Freeware Hex Editor XVI32

3) एक नया भंडार बना सकते हैं और इसे में संशोधित डंपफाइल लोड के लिए एक तथाकथित "हेक्स संपादक" का उपयोग किया है,:

$ svnadmin create newrepos 
$ svnadmin load newrepos < modified-dumpfile 

अधिक जानकारी के लिए आपको इस लिंक में भी रुचि हो सकती है:
http://svnbook.red-bean.com/en/1.1/ch05s03.html

नोट: सबवर्जन 1।बाहरी संपत्ति है, जो ठीक भविष्य में समस्याओं के इन प्रकार रोका जा सकता है: सापेक्ष URL SVN में के लिए 5 वास्तव में जोड़ा समर्थन
http://subversion.tigris.org/svn_1.5_releasenotes.html#externals

+0

यह समाधान है, लेकिन आप वास्तव में एक संपादक में एक सामान्य रूप से आकार-svn डंप फ़ाइल खोलना नहीं चाहते हैं ... ' बचाव के लिए 'sed'! – jeroenh

+1

जब तक आप फ़ाइल और प्रोप डेटा के लिए MD5 और SHA1 हैश से निपटने के इच्छुक नहीं हैं, तब तक आपको किसी टेक्स्ट एडिटर के साथ एक एसवीएन डंप संपादित नहीं करना चाहिए। इन हैंशों के मैन्युअल पुनर्मूल्यांकन ने कुछ दर्जन से अधिक की एक एसवीएन डंप फाइलों को संपादित करने में एक कठिन काम किया है। Svndumptool जैसे नौकरी के लिए बनाए गए टूल में से एक का उपयोग करना कहीं बेहतर है। – Ausmith1

0

आप किए जा सकेंगे:

क) वर्ष संशोधन की जाँच, और नए पते पर पुराने नाम इंगित करने के लिए अपने मेजबान फ़ाइल बदलने के लिए, तो अद्यतन SVN। यदि यूआरएल-पथ भी बदल गया है ... ठीक है तो आप भी हो सकते हैं:

बी) एक ऐसी स्क्रिप्ट लिखने के लिए समय लें जो मौजूदा (पुरानी संशोधन-) काम करने वाली प्रतिलिपि में गुण ढूंढें और वहां यूआरएल को बदल दें , उन्हें करने के बिना। या:

सी) संशोधन (-एस) का एक नोट बनाएं जहां आपने नए प्रॉपर्टी वैल्यू में चेक किया है, पुराना संस्करण देखें, और बस उन संशोधनों को मर्ज करें (-यह केवल गुणों को प्रभावित करें) कामकाजी प्रतिलिपि

घ) या, संभवतः, svndump का उपयोग भंडार डेटा डंप करने के लिए, डंप में URL स्ट्रिंग-बदलें, तो यह बहाल .. मैं आप किसी भी गारंटी नहीं देंगे कि कि यहां तक ​​कि काम करता है ;-)

19

मैं इसके लिए SvnDumpTool का उपयोग करेंगे।

svndumptool transform-prop svn:externals "(\S*) (|-r ?\d* ?)http://oldserver.net(/\S*)" "\2\3 \1" source.dumpfile source-fixed-externals.dumpfile 

यह subversion 1.5 format करने के लिए प्रत्येक बाहरी अप को ठीक करता है, और सापेक्ष URL का उपयोग करता है: यह आप के लिए क्या चाहिए, तो है।

तो SVN: की तरह बाहरी:

external/libraryA svn://oldserver.net/repo/libraryA 

बन:

/repo/libraryA external/libraryA 

सर्वर मार्ग सापेक्ष URL का उपयोग।

+0

मैं दूसरे भाग को समझ नहीं पा रहा हूं (रेगेक्स के बाद)। क्या आप और विस्तार कर सकते हैं? धन्यवाद । – moujib

+1

मैंने एक प्रासंगिक लिंक जोड़ा और उत्तर में और स्पष्टीकरण जोड़ा। उम्मीद है की यह मदद करेगा। – ldav1s

+0

इस पोस्ट को भी देखें: http://stackoverflow.com/questions/21292688/regex-for-svndumptool?lq=1 – Ausmith1

1

मुझे 9 उपयोगकर्ताओं और 4 तैनाती में 12 कार्य प्रतियों को स्थानांतरित करना पड़ा। यह एक सरल परिवर्तन किया गया है एक आईपी के साथ एक डोमेन की जगह, यानी thing.domain.net -> 192.168.0.1

svn relocate उम्मीद व्यवहार करने के लिए के रूप में वर्णित (नेस्टेड बाहरी पार) मैं एक सरल डॉस अनुदेश प्रत्येक स्थान पर चलाने के लिए लिखा है:

for /D %G in (*) do ( cd ./%G & svn relocate http://thing.domain.net http://192.168.0.1 & cd ..)

यह अपेक्षाकृत काम नहीं करता था, केवल माता-पिता डब्ल्यूसी को स्थानांतरित कर रहा था।

मेरा समाधान बाहरी लोगों के स्थान को बदलने के लिए खुद को भंडारों को संपादित करना था (मैंने कछुए रेपो ब्राउज़र का उपयोग किया था)। इस परिवर्तन के बाद स्थानांतरित माता-पिता के लिए एक अद्यतन सबकुछ लाने के लिए आवश्यक था।

यह शायद एक अच्छा विचार सभी कछुआ उपयोगकर्ताओं को अपने URL के इतिहास को स्पष्ट करने के लिए तो वे अनजाने वर्ष यूआरएल का उपयोग कर कार्रवाई करने नहीं है पाने के लिए (यह अभी भी DNS लुकअप में मौजूद है) होगा:

Settings->Saved Data->URL history->Clear

1

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

उदा। vi -b filename.dump

इसके अलावा, मैंने पाया कि, यदि आपकी यूआरएल लंबाई बदलती है, तो स्ट्रिंग लम्बाई भी संशोधित होती है।

नोड-पथ: ट्रंक/src/

नोड-तरह शामिल हैं: dir

नोड-कार्रवाई: परिवर्तन

प्रोप-सामग्री उदाहरण के लिए, एक प्रवेश कि इस तरह दिखता है पर विचार -length: 192

सामग्री-लंबाई: 192

K13

012,

SVN: बाहरी

वी 156

MGL_ABC SVN: // server_name/dir1/dir2

MGL_DEF SVN: // server_name/dir1/dir3

जब आप उन URL को संशोधित करने, अगर स्ट्रिंग में बदलाव की लंबाई, आपको नई लंबाई से मेल खाने के लिए "1 9 2", "1 9 2" और "156" भी बदलना होगा। मुझे पूर्ण लंबाई की गणना करना मुश्किल था लेकिन अंतर को ढूंढना आसान था।
उदाहरण के लिए, मान लें कि यूआरएल 1 3 अक्षरों से कम हो जाता है और यूआरएल 2 4 अक्षरों से कम हो जाता है। फिर, आपको उन तीन स्ट्रिंग लंबाई संख्याओं में से प्रत्येक से '7' घटा देना होगा।

0

मेरे सभी बाहरी शब्द flow नामक निर्देशिका में थे। मैं इस एक लाइनर (बैश शेल) के साथ मेरे बाहरी में URL को ठीक:

 
for p in $(find -maxdepth 4 -name flow); do svn ps svn:externals "$(svn pg svn:externals $p/.. | perl -pe 's/^(\w+) svn\+ssh.*thing\.domain\.net(.*)/$2 $1/')" $p/..; done