2012-04-04 17 views
8

हाँ, मुझे पता है। आप गिट से एसवीएन में माइग्रेट क्यों करना चाहते हैं?गिट -2-एसवीएन माइग्रेशन?

वैसे मैं ऐसी परिस्थिति में हूं कि मुझे सबवर्सन के लिए एक विशाल गिट रेपो माइग्रेट करने की आवश्यकता है! यहाँ एक कार्यप्रवाह मैं एडविन की टिप्पणी प्रति की कोशिश की है:

पहले एक स्थानीय SVN रेपो बनाने के लिए: myProject में git clone git:myNameSpace/myProject

cd और चलाएँ:: svnadmin create svn_repo

अगला मैं अपने Git रेपो की जाँच

git svn init -s --prefix=svn/ file:///home/myHome/svn_repo/myProject

git svn fetch

git rev-list --parents master | grep '^.\{40\}$' आपकी मूल प्रतिबद्धता के हैश को देखने के लिए और केवल एक ही प्रतिबद्धता देता है जैसा इसे करना चाहिए।

अगला खाली ट्रंक के हैश प्राप्त करने के लिए है के लिए प्रतिबद्ध: git rev-parse svn/trunk

यह एक दुर्भाग्य के साथ विफल:

fatal: ambiguous argument 'svn/trunk': unknown revision or path not in the working tree. Use '--' to separate paths from revisions

खैर मैं बहुत इस के बाद नहीं जा सकते ....

+5

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

+0

निश्चित रूप से, मुझे गिट पसंद है और इसे दिल की धड़कन में सबवर्जन के पक्ष में पसंद है ... लेकिन मुझे यह माइग्रेशन करने की ज़रूरत है ... –

+0

असल में, मैं गिट पर विचलन का पक्ष लेता हूं, लेकिन मुझे अपनी परिचितता और टूल के साथ और अधिक करना है विचलन के साथ एकीकरण विशेषज्ञता। गिट के फीचर सेट के साथ इसका कोई संबंध नहीं है। –

उत्तर

8

मैं आपको कई आसान चरणों में सबगिट के साथ माइग्रेट करने की सलाह दूंगा।

$ svnadmin create svn.repo 
$ subgit configure svn.repo 
$ nano svn.repo/conf/subgit.conf #edit path to your (bare!) Git repository (you may use "git clone --bare <URL> bare.git.repo" if you don't have it locally) 
$ subgit install 

यह सब कुछ है। जबकि अनुवाद सबगिट सभी कामों (यहां तक ​​कि अस्थायी), शाखाओं, विलय, अनदेखा, तिथियां, ईओएल सेटिंग्स, टैग आदि को संरक्षित करने की कोशिश करेगा, जैसा कि यह संभव हो।

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

$ subgit uninstall svn.repo 
+1

ध्यान दें कि सबगिट को सर्वर-साइड कॉन्फ़िगरेशन की आवश्यकता है (यानी 'svn.repo/conf/subgit.conf' फ़ाइल), इसलिए यदि आपके पास सर्वर तक पहुंच नहीं है तो इसका कोई उपयोग नहीं है। – Siggen

+1

चूंकि 2.0 एक 'सबगिट कॉन्फ़िगरेशन - एसवीएन-यूआरएल

'का उपयोग कर रिमोट रिपोजिटरी के साथ ऐसा ही कर सकता है। या वैकल्पिक रूप से (एक बेहतर तरीका, यदि प्री-रेप्रप्रॉप-चेंज हुक अनुमति देता है) कोई स्थानीय रूप से रिपोजिटरी को परिवर्तित कर सकता है और इसे 'svnsync' या' svndump + svnrdump' का उपयोग करके अपलोड कर सकता है। –

+0

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

3

--- जोड़ा विवरण के बाद संपादित ---

आप एक खाली प्रारंभिक कॉम क्या किया svn/trunk पर मिट? यदि नहीं, तो यह समझाएगा कि आपको एक त्रुटि क्यों मिली है जो इसे इतिहास में नहीं मिल सकती है।

टिप्पणियां (संयोजन में)

The --prefix gives you remote tracking branches like "svn/trunk" which 
is nice because you don't get ambiguous names if you call your local 
branch just "trunk" then. 

और

Then get the hash of the empty trunk commit: 

सूचित करते हैं कि वे एक svn/trunk बनाया आदत एक पूर्व मौजूदा trunk निर्देशिका के साथ SVN संघर्ष को रोकने के लिए प्रतिबद्ध। यदि ऐसा है, तो शायद आपका एकमात्र गलतफहमी svn/trunk को बाद में मिलने के लिए नहीं कर रहा है?

--- मूल पोस्ट इस प्रकार है ---

आप this की कोशिश की? जब तक आप अपने ट्रंक (या शाखा) इतिहास को रेखांकित नहीं करते हैं तब तक डॉकिट ठीक से काम नहीं करेगा।

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

+0

'गीट svn fetch' के साथ विफल रहता है: डब्ल्यू: एसवीएन से त्रुटि को अनदेखा करना, पथ शायद नहीं मौजूद है: (160013): फाइल सिस्टम में कोई आइटम नहीं है: फ़ाइल नहीं मिली: संशोधन 1, पथ '/ gentkt' डब्ल्यू: उपर्युक्त संदेश पर चिंतित न हों git-svn पुराने इतिहास के लिए आक्रामक रूप से खोज रहा है। इसमें बड़ी रिपॉजिटरीज़ –

+0

पर कुछ समय लग सकता है और फिर 'गिट रेव-पार्स एसवीएन/ट्रंक' देता है: svn/trunk घातक: संदिग्ध तर्क 'svn/trunk': अज्ञात संशोधन या पथ काम करने वाले पेड़ में नहीं है। संशोधनों से पथ को अलग करने के लिए '-' का उपयोग करें –

+0

एडविन, मैंने पोस्ट किए गए प्रश्न को अपडेट किया है और आपके द्वारा उठाए गए चरणों को लिंक किया है। मदद के लिए धन्यवाद और अगर मैं और अधिक कर सकता तो कृपया मुझे बताएं। –

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