2011-02-24 3 views
18

मैं गिट करने के लिए नया हूं, और अपना भंडार सही तरीके से स्थापित करने की कोशिश कर रहा हूं।गिट - अलग-अलग स्थानीय निर्देशिकाओं में स्टोर शाखाएं

असल में मेरा ऐप एक प्रकार का मंच है, इसलिए इस प्लेटफ़ॉर्म के कार्यान्वयन मास्टर शाखा पर आधारित हैं, लेकिन उन फ़ाइलों के साथ-साथ कुछ अतिरिक्त फ़ाइलों में कुछ छोटे बदलाव भी हैं।

मैंने इसे शाखाओं के रूप में स्थापित करने का प्रयास किया, इसलिए मेरे पास master शाखा, implementation_1 और implementation_2 है।

लेकिन जहां तक ​​मैं कह सकता हूं, इसका मतलब यह होगा कि स्थानीय रूप से सभी शाखाओं को एक निर्देशिका में संग्रहीत किया जाता है, क्योंकि उनके अलगाव केवल गिट के माध्यम से होते हैं।

मुझे क्या चाहिए 3 स्थानीय निर्देशिकाएं, master, imp_1, और imp_2। यदि मैं imp_1 निर्देशिका में कोर फ़ाइलों में से किसी एक में परिवर्तन करता हूं, तो मैं उस परिवर्तन को master शाखा में और वहां से imp_2 में विलय करने में सक्षम होना चाहता हूं।

मुझे लगता है कि इन 3 अलग-अलग भंडारों (कोर के कार्यान्वयन कार्यान्वयन) होने की आवश्यकता है। क्या वह रास्ता है? उस स्थिति में, मैं उपरोक्त परिदृश्य को संभालने के बारे में कैसे जाउंगा?

+1

'गिट-न्यू-वर्कडियर 'चाल कर सकता है (देखें http://thejspr.com/blog/work-on-multiple-branches-with-git-workdir/) – user456584

उत्तर

17

शाखा Git में प्रथम श्रेणी के नागरिक हैं, जिसका अर्थ है वहाँ बड़े VCS (SVN, सीवीएस, ...)

तुम सच में, तीन अलग अलग निर्देशिका की जरूरत है क्योंकि आप चाहते हैं की तरह शाखाओं के रूप में "नकल करते" नहीं कर रहे हैं , तीन अलग विकास के वातावरण है 3 क्लोन बनाने: एक निर्देशिका master

  • एक निर्देशिका imp_1
  • एक निर्देशिका में एक कहा जाता है में एक कहा जाता है कहा जाता है में

    • एक imp_2

    लेकिन वास्तव में शाखाओं को समझने के लिए, आप "Pros and cons of different branching models in DVCS" पढ़ सकते हैं।


    या, Git 2.5 (जुलाई 2015, 4 साल ओपी के सवाल के बाद) के बाद से, जैसा कि मैंने Multiple working directories with Git? में detailled, git worktree का उपयोग करें।

    यह एक क्लोन, एकाधिक फ़ोल्डर्स (प्रति शाखा एक) होगा।
    Git 2.7+ के साथ, आप तो उन फ़ोल्डर सूचीबद्ध कर सकते हैं:

    $ git worktree list 
    /path/to/bare-source   (bare) 
    /path/to/linked-worktree  abcd1234 [master] 
    /path/to/other-linked-worktree 1234abc (detached HEAD) 
    
  • +0

    क्या कोई पेशेवर और विपक्ष 3 है अलग-अलग निर्देशिका बनाम एक ही स्थानीय रेपो में 3 शाखाएं रखते हैं? –

    +3

    @ मुख्य प्रोफेसर लिसर्जिक-एसिड यह है कि आप एक ही समय में समानांतर में प्रत्येक शाखा पर काम कर सकते हैं, क्योंकि प्रत्येक शाखा को अपनी निर्देशिका में क्लोन किया जाता है। – VonC

    +0

    हां, लेकिन क्या एक ही डीआईआर के साथ काम करने में कोई समस्या है? उदाहरण के लिए, कहें कि मैं कुछ सामानों का परीक्षण करने के लिए एक प्रयोगात्मक शाखा बना रहा हूं, और काम के पेड़ में कुछ फाइलों को असामान्य कर दिया गया है, क्या मैं काम की मुख्य पंक्ति जारी रखने के लिए स्वतंत्र रूप से एक और शाखा की जांच कर सकता हूं? (शायद यह सबसे अच्छा उदाहरण नहीं है, लेकिन मैं यह देखने की कोशिश कर रहा हूं कि कुछ चीजें एक ही डीआईआर के उपयोग को सीमित कर सकती हैं)। –

    6

    आप अपने भंडार के तीन क्लोन बना सकते हैं और उन लोगों के बीच विलय कर सकते हैं। गिट में कांटे शाखाओं से अलग नहीं होते हैं और जिस तरह से वे विलय किए जाते हैं। आप आसानी से कर सकते हैं:

    git merge ../master 
    git pull ../imp_2 
    

    जब स्थानीय स्तर पर क्लोनिंग Git अपने वस्तुओं hardlink जाएगा और यहां तक ​​कि डिस्क स्थान

    1

    आप इस git worktree का उपयोग कर कि introduced in Git 2.5, circa July 2015 था क्या कर सकते हैं बचाने के लिए।

    git clone -b master <repo> master 
    cd master 
    
    # checking out implementation_1 in ../imp_1 
    git worktree add ../imp_1 implementation_1 
    
    # creating branch implementation_2 at master~2 as you check it out in ../imp2: 
    git worktree add -b implementation_2 ../imp_2 master~2 
    

    और voilà! हो गया।

    इस सेटअप के साथ, आपके पास केवल एक ही होगा। Git फ़ोल्डर (मास्टर/.git में)। ध्यान दें कि किसी भी शाखा को एक ही कार्यशाला में एक समय में चेक किया जा सकता है।

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