2013-05-16 10 views
6

मैं एसजीएन से गिट में माइग्रेट करने के तरीके के रूप में सबगिट का परीक्षण कर रहा हूं।सबगिट: शाखाओं को कैसे बाहर निकालना है?

मैं जो करना चाहता हूं वह गिट रिपोजिटरी में दूरस्थ शाखाएं बनाने में सक्षम है कि सभी उपयोगकर्ता का उपयोग कर सकते हैं एसवीएन पर वापस सिंक नहीं करता है।

मैं केवल उपजीट को मास्टर शाखा को ट्रैक करना चाहता हूं और इसे वापस एसवीएन में सिंक करना चाहता हूं ताकि हमारे पास अन्य गिट शाखाओं का उपयोग और साझा करने की स्वतंत्रता हो।

क्या ऐसा करने का कोई आसान तरीका है?

धन्यवाद

उत्तर

7

आदर्श समाधान को निर्दिष्ट किया जाएगा ट्रंक: SubGit configuration में refs/सिर/मास्टर मानचित्रण, तो SubGit साथ मास्टर किसी अन्य शाखाओं अनदेखी ट्रंक सिंक्रनाइज़ होगा।

दुर्भाग्यवश, सबगिट को इस समय मैपिंग की कम से कम एक शाखा की आवश्यकता है (संस्करण 1.0.x और 2.0.x)। यही है, एक कुछ इस तरह निर्दिष्ट करने के लिए है:

trunk = trunk:refs/heads/master 
branches = branches/*:refs/heads/* 
shelves = shelves/*:refs/shelves/* 
tags = tags/*:refs/tags/* 

जब से तुम, सभी Git शाखाओं सिंक्रनाइज़ मुद्दा वैकल्पिक हल के लिए कुछ विशेष नाम स्थान उपयोग करने पर विचार करने के लिए नहीं जा रहे हैं:

trunk = trunk:refs/heads/master 
branches = branches/*:refs/gitsvn/heads/* 
... 

तो, अगर कोई मास्टर शाखा को केंद्रीय गिट भंडार में धक्का देता है, तो इसे ट्रंक पर अनुवादित किया जाता है। हालांकि, अगर कोई शाखा foo धक्का देता है, तो सबगिट उस शाखा को अनदेखा करता है क्योंकि रेफ/हेड/foo सिंक स्कोप से बाहर है।

मुसीबतों मर्ज से आते हैं करता है: के लिए प्रतिबद्ध है, तो एक मास्टर में शाखा foo विलय का परिणाम है, तो SubGit इसी यदि आप चाहते ए प्रतिबद्ध की मूल के लिए शाखाओं/foo सबवर्सन पक्ष पर बनाता है * शाखाओं में SubGit उत्पन्न शाखाओं को शामिल नहीं करने के लिए पसंद/** नाम स्थान, सबवर्सन पक्ष पर कुछ विशेष शाखाओं के रूप में अच्छी तरह से उपयोग करने पर विचार: के प्रतिबद्ध एक gitsvn/शाखाओं को भेजा जाना चाहिए एक ही मूल

trunk = trunk:refs/heads/master 
branches = gitsvn/branches/*:refs/gitsvn/heads/* 
shelves = shelves/*:refs/shelves/* 
tags = gitsvn/tags/*:refs/gitsvn/tags/* 

इस मामले में/foo शाखा।

यह इस समय उपलब्ध सबसे अच्छा समाधान है। हमारे पास संस्करण 2.1 के लिए एक सुविधा अनुरोध भी है जो आपके लिए एक आदर्श समाधान सक्षम करेगा, लेकिन इसे लागू करने से पहले इसमें कुछ समय लग जाएगा। SubGit 3.0 पर

अद्यतन:

3.0 संस्करण के बाद।0 (पल में जल्दी पहुँच मंच, पर http://subgit.com/eap डाउनलोड) SubGit एकल शाखा लेआउट का समर्थन करता है, तो विन्यास फाइल के रूप में देख सकते हैं इस प्रकार है:

  1. कोई ट्रंक, कोई शाखाओं, कोई टैग और कोई अलमारियों:

    [svn] 
        url = http://host.com/repos/project 
    

    इस मामले में, प्रोजेक्ट निर्देशिका को मास्टर गिट भंडार में सीधे मैप किया गया है; SubGit किसी भी अन्य शाखाओं को अनदेखा करता है और कभी अलमारियों का निर्माण नहीं करता है जिसका मतलब है कि अज्ञात गिट शाखाएं एसवीएन में समन्वयित नहीं होती हैं।

  2. एकल ट्रंक, कोई अलमारियों:

    [svn] 
        url = http://host.com/repos/project 
        trunk = trunk:refs/heads/master 
    

    इस मामले में, परियोजना/ट्रंक निर्देशिका मास्टर Git भंडार में शाखा को मैप किया है; SubGit किसी भी अन्य शाखाओं को अनदेखा करता है और कभी अलमारियों का निर्माण नहीं करता है।

  3. अलमारियों के साथ एकल ट्रंक:

    [svn] 
        url = http://host.com/repos/project 
        trunk = trunk:refs/heads/master 
        shelves = shelves/*:refs/shelves/* 
    

    इस मामले में, परियोजना/ट्रंक निर्देशिका मास्टर Git भंडार में शाखा को मैप किया है; SubGit किसी भी अन्य शाखाओं को अनदेखा करता है लेकिन यह अज्ञात शाखाओं को संस्करण 1.0.x और 2.0.x के लिए डिफ़ॉल्ट रूप से अलमारियों में अनुवाद करता है।

आशा है कि मदद करता है।

+0

उत्तर के लिए धन्यवाद। मैं इस दौरान इसके साथ खेल रहा हूं और अपनी सभी गिट-केवल शाखाओं (जैसे कि foo) को एक अलग रिमोट नंगे भंडार में डालकर आया हूं और फिर जब आवश्यक हो तो मास्टर में फू विलय कर रहा है और फिर चीजों को सिंक्रनाइज़ेशन रिपोजिटरी में वापस धक्का दे रहा है –

+0

यह उल्लिखित 'आदर्श समाधान' के साथ कैसे चल रहा है? मैंने एक [नया प्रश्न] खोला (http://stackoverflow.com/questions/22377071/subgit-avoid-to-synchronize-git-branches-onto-svn) इस से संबंधित है, क्योंकि मैं कभी भी गिट शाखाएं नहीं लेना चाहता svn में परिलक्षित होता है। धन्यवाद – ThanksForAllTheFish

+0

यह अभी भी प्रगति पर है। इस तरह का लेआउट svn-to-git दिशा में पूरी तरह से समर्थित है, लेकिन कुछ किनारे के मामले हैं जिन्हें हमें गिट को एसवीएन संशोधन में परिवर्तित करते समय सौदा करना पड़ता है। वैसे भी यह सुविधा इस समय हमारी प्राथमिकता सूची के शीर्ष पर है। – vadishev

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