2012-04-23 12 views
8

मुझे एक विशाल एसवीएन भंडार आयात करना है जिसे मुझे एक सर्वर से दूसरे सर्वर में स्थानांतरित करना है। इसलिए मैं यह पुराने सर्वर से निर्यात:मैं एसवीएन आयात लाइन अंत त्रुटि को कैसे ठीक कर सकता हूं?

svnadmin dump . > archive.svn 

और नया एक पर आयातित:

Cannot accept non-LF line endings in 'svn:ignore' property 

:

svnadmin load . < archive.svn 

आयात प्रक्रिया के बीच में मैं यह त्रुटि आई मैं इसे कैसे ठीक करूं? मेरे पास दोनों सर्वरों का पूरा नियंत्रण है।

उत्तर

3

क्या आपने सर्वर संस्करण बदल दिया है? यह 1.6 में एक ज्ञात मुद्दा है, और 1.4 या 1.5 से जाने पर समस्याएं पैदा करता है।

सबवर्सन 1.6 अब संपत्ति फ़ाइलों में कैरिज रिटर्न (^ एम) स्वीकार नहीं करता है। आपको अपने svn में लाइन ब्रेक को ठीक करने की आवश्यकता होगी: फ़ाइल को अनदेखा करें, या अगर यह आसान हो तो पुनः बनाएं।

वैकल्पिक रूप से, आप Subversion 1.7 के लिए जा सकते हैं, या uberSVN का उपयोग कर सकते हैं।

+1

मैं नवीनतम संस्करण के लिए पुराने सर्वर अद्यतन, लेकिन मैं अभी भी एक ही मुद्दा मिल गया। – xsl

+0

आप पहले क्या उपयोग कर रहे थे? क्या आपने यह सुनिश्चित करने के लिए फ़ाइल गुणों को सेट करने का प्रयास किया है कि सही प्रारूप का उपयोग किया जाए? एक अच्छी पोस्ट है [यहां] (https://mikewest.org/2006/06/working-with-subversion-file-properties) जो बताती है कि कैसे ... –

+0

मैंने svnadmin को पारित एक पैरामीटर के साथ लाइन एंडिंग को अनदेखा कर दिया लोड – xsl

11

आपके पास 2 विकल्प हैं, स्रोत की मरम्मत करें या प्रोप सत्यापन अक्षम करें।

स्रोत मरम्मत (SVN: लॉग इन करें और SVN: ध्यान न दें):

sed -e '/^svn:log$/,/^K/s/^M/ /' -e '/^svn:ignore$/,/^PROPS-END$/ s/^M/\n/' archive.svn > repaired-archive.svn 

svnadmin load . < repaired-archive.svn 

कहाँ ^एम एक नियंत्रण चरित्र, हेक्स में 0D मतलब यह है कि है। इसका इस्तेमाल प्राप्त करने के लिए^वी^एम (नियंत्रण वी नियंत्रण एम) के बजाय^एम (स्वरित एम या नियंत्रण एम)

अक्षम करना प्रोप सत्यापन:

svnadmin load --bypass-prop-validation . < archive.svn 
+0

सावधान रहें कि उपरोक्त sed कमांड मुझे यह त्रुटि देता है 'svnadmin: E200014: बाइनरी फ़ाइल लोड करते समय चेकसम मिस्चैच'। @tangens sed मेरे लिए काम करता है। – ceilfors

+0

मैं सिर्फ सफलतापूर्वक एक डंप फ़ाइल की मरम्मत, –

2

मैं इस त्रुटि का सामना किया जब उन्नयन एक 1.6 रेपो 1.8। मुझे नेट पर कई "फिक्सेस" मिले।

--bypass-प्रोप-मान्यता मेरे लिए अपील नहीं की है, क्योंकि यह समस्या स्थगित, अगली बार जब आप रेपो आप एक ही promblem मारा जाएगा बहाल करने के लिए की जरूरत है।

मुझे टिप्पणियां प्राप्त करने और उन्हें फिर से सेट करने के माध्यम से लूप करने के लिए एक बैश स्क्रिप्ट मिली लेकिन यह काम नहीं किया।

वेंटुरा 10 के समाधान पर एक सुधार ने काम किया।

Where ^M is a control character, that means 0D in hex. To get it use ^V^M (control V control M) instead ^M (circumflex M or control M)

5

@ ventura10 के जवाब का पहला विकल्प अच्छा लग रहा था: डंप के आकार की वजह से मैं एक आदेश का उपयोग अवांछित पात्रों को दूर करने, जबकि डंप बहाल

sed -e '/^svn:log$/,/^K/s/^M/ /' -e '/^svn:ignore$/,/^PROPS-END$/ s/^M/\n/' /path/to/svn.dump | svnadmin load /path/to/repo 

नोट समाप्त हो गया लेकिन मेरे लिए काम नहीं किया। sed कमांड ने गुण अनुभाग के बाहर कुछ संस्करण सामग्री को बदल दिया जिसके परिणामस्वरूप डंप लोड करते समय md5 mismatches में परिणाम हुआ।

क्योंकि मेरे भंडार में द्विआधारी सामग्री के साथ कोई गुण नहीं है, इसलिए मैंने सभी गुणों को सही करने के लिए sed आदेश को बदल दिया है और न केवल svn:log और svn:ignore। मुझे यह भी यकीन था कि कोई संस्करण फ़ाइल में Prop-content-length: से शुरू होने वाली रेखा शामिल नहीं है। अन्यथा डंप लोड करते समय मुझे एक त्रुटि मिलती।

sed -e '/^Prop-content-length: /,/^PROPS-END$/ s/^M/ /' svn.dump > svn.dump.repaired 

यह [blank] साथ ^M को बदलने के लिए महत्वपूर्ण है, क्योंकि संपत्ति के मूल्य का आकार बदलने नहीं होना चाहिए।

@ ventura10 का ध्यान अभी भी मान्य है:

^M is a control character, that means 0D in hex. To get it use ^V^M (control V control M) instead ^M (circumflex M or control M)

यह विश्वास है कि एक मौजूदा भंडार 1.4 SVN से 1.7 svn के उन्नयन के इस कदम nessecary बनाता है कठिन है, लेकिन मैं कोई दूसरा रास्ता मिल गया है कैरिज रिटर्न से छुटकारा पाने के लिए जो अब svn 1.6 के बाद स्वीकार नहीं किया जाता है।

+0

नीचे उत्तर देखें आप कमांड में 'sed -e '/^प्रोप-सामग्री-लंबाई हेक्स मान का उपयोग कर सकते हैं: /,/^ सहारा-छोर $/s/\ x0D// 'svn.dump> svn.dump.repaired' – ceilfors

2

उपयोग svndumptool:

svndumptool.py eolfix-prop svn:ignore svn.dump svn.dump.repaired 

@tangens समाधान मेरे लिए भी काम करता है, लेकिन यह सही रूप में मैं गाड़ी वापसी पात्रों के स्थानापन्न के रूप में एक अतिरिक्त स्थान चरित्र हो रही है नहीं है। हालांकि मैंने परीक्षण किया था कि svn: अनदेखा अभी भी उस अतिरिक्त स्थान के साथ काम करता है, लेकिन मैंने अन्य एसवीएन गुणों का परीक्षण नहीं किया।

svndumptool का उपयोग करने का नकारात्मक पक्ष यह केवल एक समय में एक एसवीएन संपत्ति पर काम कर सकता है, जो आपकी डंप फाइलें बड़ी होने पर समय लेने वाली है।


कुछ निष्कर्ष

आप क्यों @tangens खाली चरित्र के साथ^एम की जगह नहीं थी पर उत्सुक हो सकता है। आप खाली चरित्र से बदलने के लिए कोशिश करते हैं, तो आपको यह त्रुटि मिलती हो जाएगा:

svnadmin: E140001: Dumpstream data appears to be malformed 

डंप फ़ाइल भंडार Prop-content-length संपत्ति जो संपत्ति के वास्तविक सामग्री की सामग्री के खिलाफ मिलान किया जाएगा।^एम को एक खाली चरित्र में बदलने से संपत्ति की सामग्री की लंबाई कम हो जाएगी, इसलिए त्रुटि।

svndumptool Prop-content-length और Content-length क्रमशः बदल देगा।

+0

मैंने अभी डाउनलोड किया है और svndumptool.py 0.6.1 स्थापित किया है, और' eolfix-prop' कमांड कहीं भी नहीं मिला है! –

+0

ऐसा लगता है कि आदेश केवल संस्करण 0.6.1 के बाद जोड़ा गया है। जैसा कि आप [इस प्रतिबद्ध] में देख सकते हैं (https://github.com/jwiegley/svndumptool/commit/38673392c1dea29303667fc4ea34726e64d248bf), यह 2013 में दिनांकित था। यहां तक ​​कि संस्करण [0.7.0 प्रतिबद्ध] (https://github.com/ jwiegley/svndumptool/प्रतिबद्ध/b24dfa481a1f10c923904902a1621b551a756191 # diff-0c5514081fb7b6c087da4a44ae668f7f) 2009 – ceilfors

+0

तो मैं इन बाद के संस्करणों कैसे मिलता है पर किया गया था? मैं जो नवीनतम पाया वह 0.6.1 था। –

4

थोड़ा जिमनास्टिक के साथ आप svnsync का उपयोग करके इस पर काम कर सकते हैं, जिसमें ईओएल को ठीक करने की क्षमता है। मान लीजिए कि आपकी रिपॉजिटरी archive.svn में डंप हो गई है।

पहले, रेपो वापस लोड करने के लिए भंडार बनाने EOL समस्याओं की अनदेखी:

svnadmin create repo 
svnadmin load repo < archive.svn --bypass-prop-validation 

अब में कॉपी करने के लिए एक नया भंडार बनाने के लिए:

svnadmin create repo-fixed 

svnsync कुछ पूर्व प्रतिबद्ध हुक की आवश्यकता है, भले ही आप इसका उपयोग न करें, इसलिए repo-fixed/hooks/pre-revprop-change:

#!/bin/sh 
exit 0 
में खाली एक बनाने के लिए बस अपने संपादक का उपयोग करें 0

svnsync के लिए गंतव्य भंडार प्रारंभ:

svnsync sync file:///path/to/repo-fixed 

वाह:

svnsync init file:///path/to/repo-fixed file:///path/to/repo 

अब अधिक पूरे भंडार नकल! NOTE: Normalized svn:* properties to LF line endings, नए भंडार

एक बार यह हो डंप:

svnadmin dump repo-fixed > archive-fixed.svn 
: svnsync भी आप अच्छी खबर दे देंगे (क्यों सबवर्सन टीम svnadmin अद्यतन नहीं किया एक ही सामान्य करने के लिए मेरे लिए एक रहस्य है।)

अब आपके पास archive-fixed.svn है, जो archive.svn के समान होना चाहिए सिवाय इसके कि ईओएल आवश्यकतानुसार तय किया गया है।

(वैकल्पिक) अब आप अस्थायी भंडार आप svnsync के लिए इस्तेमाल निकाल सकते हैं:

rm -rf repo-fixed 

अद्यतन यह पता चला है, तो आप इस नए डंप लोड करते हैं, अपने सबवर्सन ग्राहक एक त्रुटि हो जाता है: Repository UUID does not match expected UUID । आपको svnadmin setuuid ...change the UUID ID to what it used to be का उपयोग करना होगा। भी

देखें;

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

+0

महान काम! मैंने पाया कि मुझे हुक के निष्पादन बिट को सेट करना था: chmod u + x gjbh-fixed/hooks/pre-revprop-change – boes

1

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

  1. डाउनलोड और TortoiseSVN या किसी अन्य सॉफ्टवेयर है कि SVN कमांड लाइन उपकरण शामिल हैं स्थापित करें। मैंने इसे पहले ही
  2. cmd.exe से शुरू किया था, svnserve -d चलाएं।यह cmd विंडो अब व्यस्त है।
  3. शुरू
  4. एक और cmd.exe एक रेपो बनाने के लिए: svnadmin create d:\svn_repos\test12
  5. लोड डंप रेपो में: svnadmin load d:\svn_repos\test12 < d:\temp\svn\backup_test.dump

svnserve; आप विस्तृत जानकारी क्या विफल रहा है दे देंगे।

और यहाँ क्या आप की मरम्मत करना है (पर मूल, बाएँ सही पक्ष पर मरम्मत): enter image description here

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

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