कैसे तोड़फोड़ काम करने की प्रतिलिपि UUID को बदलने के लिए?


13

मैंने हाल ही में एक पुराने 1.2.3 संस्करण से 1.6.0 तक svnadmin डंप / लोड के माध्यम से सबवर्सन रिपॉजिटरी को अपडेट किया है । पुराने रिपॉजिटरी सभी एक ही यूयूआईडी का इस्तेमाल करते थे (रिपॉजिटरी एक टेम्पलेट रिपॉजिटरी को कॉपी करके बनाया गया था)। मैं अद्वितीय होने के लिए svnadmin setuuid के माध्यम से नए रिपॉजिटरी के एक जोड़े पर यूयूआईडी को बदल दिया है। मैं सिर्फ उन रिपॉजिटरी की अपनी मौजूदा कार्यशील प्रतियों को स्थानांतरित नहीं कर सकता क्योंकि यूयूआईडी अलग हैं। मुझे पता है कि वर्किंग कॉपी एक्सपोर्ट करने और नए रिपॉजिटरी से चेक करने के बारे में, लेकिन मैं सोच रहा था कि क्या वर्किंग कॉपी के यूयूआईडी को इन-प्लेस में बदलने का कोई तरीका है, जैसे रिपॉजिटरी के लिए svnadmin setuuid क्या करता है।

जवाबों:


3

आपको अपने खींचे गए रेपो में सभी 'प्रविष्टियों' फ़ाइलों को संपादित करने की आवश्यकता है। यदि रेपो में बहुत सारी निर्देशिकाएं हैं, तो ढूँढें + एक स्क्रिप्ट स्क्रिप्ट कार्य का छोटा काम करेगी।


17

तोड़फोड़ 1.7 काम की नकल प्रारूप के बाद से नया जवाब । आपको sqlite3कमांड लाइन उपयोगिता की आवश्यकता है ।

आपकी वर्किंग कॉपी के रूट डायरेक्टरी में, .svn/SQLite डेटाबेस के साथ अब एक सिंगल फोल्डर है। आप वर्तमान रिपॉजिटरी UUIDको आपकी वर्किंग कॉपी के लिए ज्ञात कर सकते हैं :

$ sqlite3 .svn/wc.db 'select uuid from REPOSITORY where id=1'
b6dc3e6c-5320-4549-b231-c153d86d7525

नतीजतन, परिवर्तन के UUIDसाथ किया जा सकता है:

$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032" where id=1'

बेशक, .svn/wc.dbअपडेट क्वेरी को लागू करने से पहले फ़ाइल का बैकअप रखें । इस बात की लगभग कोई संभावना नहीं है कि आपकी रिपॉजिटरी इकाई की अलग-अलग आईडी है या उस तालिका में कई लाइनें हैं लेकिन आप देख सकते हैं कि क्या आपको अप्रत्याशित परिणाम मिलते हैं।


+1 ने एक रीपोकेटेड रेपो के साथ पूरी तरह से काम किया जिसने UUID
Amro

8

यहाँ एक कमांड है जो SVN 1.6 और उससे नीचे की चाल करता है:

find . -type f -name entries -exec sed -i 's/old-uuid/new-uuid/g' {} \;

बदलें old-uuidऔर new-uuidवास्तविक आईडी के साथ।


1
+ 1 समाधान के लिए धन्यवाद। यह रिक्त स्थान वाले निर्देशिकाओं के लिए काम नहीं कर रहा है। "ढूँढें -type f -name प्रविष्टियाँ -exec sed -i 's / old-uuid / new-uuid / g' {} \"; " बिना डबल कोट्स के काम करने लगता है।
टॉमी

इस विधि को नेक्रोट करने के लिए sry इस विधि ने मुझे समय का एक गुच्छा बचाया .. दूसरों के लिए यह कोशिश कर रहा है, बस एक नोट जोड़ना चाहते हैं। MACOX पर सैड को थोड़ा अलग उपयोग करने की आवश्यकता है, यू कहने की आवश्यकता है sed -i "" 's/old-uuid/new-uuid/' और यह काम करता है (सिर्फ अतिरिक्त खाली दोहरे उद्धरण) ( रेफरी )
कार्तिक टी

2

यवेस मार्टिन के जवाब ने हमारे लिए एसवीएन 1.8 के साथ कई कार्यशील प्रतियों पर शानदार काम किया, लेकिन हमने उन मामलों में भाग लिया जहां यह काम नहीं करता था।

"जहां आईडी = 1" के बिना यवेस कमांड चलाना हमारे लिए सभी मामलों में काम करता है:

$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032"'

ऐसा क्यों हुआ, इसकी जांच करते हुए, मुझे पता चला कि कई यूयूआईडी भंडारित किए जाते हैं, जब भंडार को स्थानांतरित करते हैं, यवेस अंतर्ज्ञान के विपरीत है कि ऐसा कभी नहीं होना चाहिए।

REPOSITORY तालिका में एक नई प्रविष्टि मौजूदा एक को अपडेट करने के बजाय एक रीकॉल के बाद जोड़ी जाती है, एक नई आईडी को नई रिपॉजिटरी रूट और उसके UUID के साथ संग्रहीत करती है। इसलिए जो मामले ठीक से काम करने में विफल रहे थे, वे कार्य प्रतियां थीं जो पहले से ही अतीत में स्थानांतरित हो गई थीं: कमांड काम करती दिखाई देगी, लेकिन केवल प्रारंभिक यूयूआईडी को बदल दिया गया था, वर्तमान में उपयोग नहीं किया जा रहा था।

एक इस आदेश के साथ एक काम की प्रतिलिपि में संग्रहीत जड़ों और यूयूआईडी की सूची की जांच कर सकते हैं:

$ sqlite3 .svn/wc.db 'select id,uuid,root from REPOSITORY'

मैं अंत में नोट करूंगा कि मुझे विंडोज कमांड लाइन / बैच फ़ाइलों के लिए उद्धरणों के एक अलग सेट का उपयोग करना था, निम्नानुसार है:

> sqlite3.exe .svn\wc.db "update REPOSITORY set uuid='1c0d1ec1-2326-0410-bef5-eb29cddfc032'"

विवरण के लिए धन्यवाद जब एक कामकाजी प्रतिलिपि को स्थानांतरित कर दिया गया है, तो मुझे इस व्यवहार के बारे में पता नहीं था
यवेस मार्टिन

1

अनुभाग " प्रबंध रिपोजिटरी UUIDs " svn लाल-बीन पुस्तक में वह उत्तर हो सकता है जिसकी आपको तलाश है।


यह खंड रिपोजिटरी यूयूआईडी के बारे में बात करता है, कॉपी यूयूआईडी काम नहीं करता है।
इयान

@ इऑन: उस सेक्शन का उद्धरण: 1.5 से पहले के तोड़फोड़ के संस्करणों का उपयोग करने वाले लोगों के लिए, ये कार्य थोड़े अधिक जटिल हैं। आप स्पष्ट रूप से एक रिपॉजिटरी डंप फ़ाइल स्टब को पाइप करके एक रिपॉजिटरी का यूयूआईडी सेट कर सकते हैं जो svnadmin लोड --force-uuid REPOS-PATH के माध्यम से नए यूयूआईडी विनिर्देश को वहन करता है - क्या आपको इसकी आवश्यकता नहीं है?
यासोसर

1
फिर से, नहीं, मैं रिपॉजिटरी यूयूआईडी के बारे में बात नहीं कर रहा हूं , बल्कि यूयूआईडी की कॉपी काम कर रहा हूं ; कार्य प्रतियां एक चेकआउट के समान हैं।
इयान

आप कार्य प्रतिलिपि UUID को उस सर्वर रेपो में अपडेट या अपडेट किए बिना बदल नहीं सकते हैं, जो रेपो के [नए / मौजूदा] स्थान पर कार्य प्रतिलिपि को स्विच-इन करता है।
यासोसर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.