2012-03-06 9 views
34

जब git svn clone चल रहा है और अक्सर बाद में git svn fetch आपरेशनों के दौरान मैं फ़ोल्डरों की एक संख्या के लिए यह संदेश प्राप्त:git-svn "revmap नहीं मिला" - इसका क्या अर्थ है?

Couldn't find revmap for <SVN folder URL> 

मेरे भंडार लगता ठीक काम करने के लिए। इस संदेश का क्या अर्थ है? क्या मुझे इसके बारे में चिंतित होना चाहिए?

+4

पुनरावृत्ति सबवर्जन प्रतिबद्धता संशोधन संख्या (आर 123) और गिट प्रतिबद्ध हैश के बीच मैपिंग है (b389fe ...)।कोई फर्क नहीं पड़ता कि त्रुटि का मतलब क्या है, इसके अलावा मैं इसे नियमित रूप से देखता हूं और यह सौम्य लगता है। –

+0

मुझे लगता है कि इसका मतलब है कि संशोधन इतिहास संरक्षित नहीं किया जा सकता है। – bancer

उत्तर

32

मेरे पास पूरा जवाब नहीं है, लेकिन यह त्रुटि git-svn.perl द्वारा उत्पन्न की गई है। (प्रासंगिक कोड पथ do_fetch -> make_log_entry -> find_extra_svn_parents -> lookup_svn_merge।) वह कोड एक svn विलय प्रतिबद्धता svn को देखने का प्रयास कर रहा है: mergeinfo प्रॉपर्टी को इसके सभी मूल प्रतिबद्ध/शाखाओं को समझने के लिए इसे गिट क्लोन के अंदर एक अच्छा, बहु-अभिभावक विलय प्रतिबद्धता में बदलना। यदि वह अभिभावक संकल्प विफल रहता है, तो आपकी प्रतिबद्धता अभी भी गिट में लाई जाएगी; यह वही मूल जानकारी नहीं होगी जैसा कि अन्यथा होगा।

अब तक, मुझे अपने वर्तमान मुख्य उपयोग मामले के लिए इस त्रुटि से उत्पन्न होने वाली कोई बड़ी समस्या नहीं मिली है, जो एक एसवीएन रेपो को गिट में परिवर्तित कर रहा है; गिट-एसवीएन उन बड़े विलयों को हल करने में सक्षम रहा है जो वास्तव में मेरे लिए महत्वपूर्ण हैं, और ये त्रुटियां अब तक व्यक्तिगत चेरी-पिक विलय या पुरानी शाखाओं तक सीमित हैं जो मुझे अब परवाह नहीं है।

असल में, दूसरी नज़र में, ऐसा लगता है कि इनमें से अधिकतर त्रुटियों में से कुछ ऐसी त्रुटियों से निकलती हैं जहां svn:mergeinfo को एसवीएन में गलत स्तर के रूप में वर्णित किया गया है। एसवीएन रेपो में, हम आमतौर पर एसवीएन रिकॉर्ड करने का प्रयास करते हैं: शाखा रूट पर mergeinfo, उदा। एसवीएन/ट्रंक पर, जबकि मामलों की गिट शिकायत कर रही है, जो कि विशेष शाखा उपनिर्देशिकाओं से जुड़ी मर्जिन्फो से संबंधित प्रतीत होती है, उदाहरण के लिए svn/trunk/dir1 पर। मैं एक एसवीएन विशेषज्ञ नहीं हूं, लेकिन मेरा वर्तमान ह्युरिस्टिक है कि यदि आपके पास बहुत सारे svn हैं: mergeinfos जो शाखा रूट पर नहीं हैं, तो आपके svn repo या आपकी विलय प्रक्रिया के साथ कुछ ख़राब हो सकता है। यदि यह सही है, तो यह समझ में आता है कि गिट शिकायत करेगा। मेरे अपने मामले में, मुझे लगता है कि इनमें से अधिकतर "अजीब" svn संशोधित करता है: subdir स्तर (उदा। Svn/trunk/dir1) पर शाखा रूट (उदा। Svn/trunk) और पर mergeinfo दोनों; गिट जूल जो भी रूट-स्तर से जरूरी है, और उपदीर स्तर के बारे में एक स्पष्ट रूप से हानिरहित त्रुटि फेंकता है।

ऐसा कहा जाता है कि कुछ लोग कुछ मामलों में समस्याएं रिपोर्ट कर रहे हैं, खासकर जब rebasing in a git-svn repo where not all the branches were checked out

2

बस इतना ध्यान रखें करना चाहता था - वहाँ वास्तव में Git-SVN में एक छिपा फ़ाइल, जैसे

.git/svn/refs/remotes/git-svn/.rev_map.00088888-caaa-4444-9999-2222eeeeeee4 

कुछ कहा ... जहां समापन आईडी भंडार UUID या git-svn-id है।

यह एक बाइनरी फ़ाइल है, और वहाँ /usr/lib/git-core/git-svn में इस पर थोड़ा अधिक है:

# rev_map: ... 
# This is the replacement for the rev_db format, which was too big 
# and inefficient for large repositories with a lot of sparse history 
# (mainly tags) 
# 
# The format is this: 
# - 24 bytes for every record, 
#  * 4 bytes for the integer representing an SVN revision number 
#  * 20 bytes representing the sha1 of a git commit 
... 
# - Piping the file to xxd -c24 is a good way of dumping it for 
#  viewing or editing (piped back through xxd -r), should the need 
#  ever arise. 

ध्यान दें कि उत्पादन इस तरह दिखता है:

$ cat .git/svn/refs/remotes/git-svn/.rev_map.* | xxd -c24 | head -1 
0000000: 0000 0001 33ee 22cc 9933 88aa 44ff 22dd 5566 88ee 66aa bbcc ....5.'..?..J...Zj..`... 

मुझे लगता है कि आप टाइप जब git svn info , यह वह फ़ाइल है जिस पर परामर्श किया जाता है, ताकि आपको प्रतिबद्धता के लिए git SHA हैश के आधार पर एक एसवीएन संशोधन संख्या मिल सके। मुझे नहीं पता कि कोई इसे कैसे पुनर्निर्माण कर सकता है, हालांकि (althogh git svn reset इस फ़ाइल से प्रविष्टियों को मिटाने में मदद कर सकता है, 100% सुनिश्चित नहीं है)

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