2010-12-16 16 views
18

मेरे परियोजना निम्न स्थानोंक्या एक मर्कुरियल सब्रेस्पिटरी को मुख्य भंडार की उपनिर्देशिका होना चाहिए?

C:\Dev\ProjectA 
C:\Lib\LibraryB 
C:\Lib\LibraryC 

में कोड से बना है वर्तमान में इन फ़ोल्डरों में से प्रत्येक के एक पूरी तरह से स्वतंत्र मर्क्युरियल भंडार है। प्रोजेक्ट ए हर समय बदलता है, लाइब्रेरी बी और लाइब्रेरी सी शायद ही कभी बदलता है।

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

क्या मैं subrepositories का उपयोग करके इस पर सुधार कर सकता हूं? क्या मुझे लाइब्रेरी बी और सी को परियोजना ए की उपनिर्देशिका बनाने की आवश्यकता होगी?

यदि लाइब्रेरी बी और सी प्रोजेक्ट ए की उप-निर्देशिकाएं होनी चाहिए तो मैं क्या करूँगा यदि मैं प्रोजेक्ट डी शुरू करना चाहता हूं जो लाइब्रेरी बी का उपयोग करता है लेकिन अन्यथा परियोजना ए से संबद्ध नहीं है?

उत्तर

18

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

किसी भी परियोजना दोनों स्वतंत्र रूप से और मौजूद कर सकते हैं एक ही समय में एक अन्य परियोजना के subrepository के रूप में। मैं वर्कफ़्लो का सुझाव देकर समझाऊंगा।

सबसे पहले, अपने परियोजनाओं में से प्रत्येक (ए, बी, सी) एक धन्य भंडार है कि कहीं प्रकाशित किया जाता है होना चाहिए:

blessed repository

आप अपनी खुद की सर्वर पर hgwebdir चला सकते हैं, या उपयोग करना एक Mercurial होस्टिंग सेवा की तरह Bitbucket या Kiln। इस तरह डेवलपर्स के पास परिवर्तनों को खींचने/पुश करने के लिए केंद्रीय प्राधिकरण बिंदु होता है, और आपके पास बैकअप बनाने के लिए कुछ है।

अब आप इन खजाने के क्लोन दो अलग अलग तरीकों पर काम करने के लिए कर सकते हैं:

  • सीधे क्लोन अपनी परियोजना। उदाहरण के लिए:

    hg clone http://bitbucket.org/LachlanG/LibraryB C:\Lib\LibraryB 
    
  • और/या निम्नलिखित सामग्री के साथ ProjectA की जड़ में एक .hgsub फ़ाइल डालकर subrepository परिभाषाओं बनाएँ:

    libraries/libraryB = http://bitbucket.org/LachlanG/LibraryB 
    libraries/libraryC = http://bitbucket.org/LachlanG/LibraryC 
    

ये subrepository परिभाषाओं मर्क्युरियल बताते हैं कि जब भी परियोजना ए को क्लोन किया जाता है, तो उसे libraries फ़ोल्डर में लाइब्रेरी बी और लाइब्रेरी सी के क्लोन भी रखना पड़ता है।

यदि आप प्रोजेक्ट ए में काम कर रहे हैं और प्रतिबद्ध हैं, तो libraries/LibraryB और libraries/LibraryC में आपके परिवर्तन भी किए जाएंगे। Mercurial रिकॉर्ड करेगा कि लाइब्रेरी का कौन सा संस्करण प्रोजेक्ट ए द्वारा .hgsubstate फ़ाइल में उपयोग किया जा रहा है। नतीजा यह है कि यदि आप पिछले सप्ताह काम करने वाले कामों को देखने के लिए hg update प्रोजेक्ट के पुराने संस्करण में हैं, तो आपको अपने पुस्तकालयों का संबंधित संस्करण भी मिलता है। आपको टैग बनाने की भी आवश्यकता नहीं है :-)

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

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

+0

वाक्य के अंत में आपके द्वारा वर्णित पुस्तकालय फ़ोल्डर कहां है, "ये उपनिवेश परिभाषाएं बताती हैं कि जब भी प्रोजेक्ट ए क्लोन किया जाता है, तो उसे पुस्तकालय फ़ोल्डर में लाइब्रेरीबी और लाइब्रेरीसी के क्लोन भी रखना पड़ता है।" – LachlanG

+0

यह सिर्फ एक फ़ोल्डर है, लाइब्रेरी/लाइब्रेरी बी = http://bitbucket.org/LachlanG/LibraryB का बायां हिस्सा है जहां दाएं तरफ से क्लोन –

+0

@LachlanG होना चाहिए: यह ProjectA की जड़ में दिखाई देगा क्लोन, उदाहरण के लिए 'सी: \ देव \ ProjectA \ पुस्तकालय \'। –

2

आप वास्तव में परियोजना A की B और C subrepos घोषणा कर सकते हैं (वे Mercurial Subrepository में वर्णित है, उप-निर्देशिका के रूप में दिखाई देगा)।
कि आपके रिलीज तंत्र में सुधार होगा क्योंकि यह आपको करने की अनुमति होगी: के तहत A

  • टैग प्रत्येक B की एक सटीक टैग और C

    • एक ही स्थान पर सभी रेपोस मिल (A और के तहत)
    • संदर्भ उप-रेपो सबसे पहले अगर उनके पास
    • टैग AB और C टैग्स के बारे में जानकारी के साथ कोई संशोधन था (A का कोई भी क्लोन एक्सा प्राप्त करने में सक्षम होगा B और C की सीटी टैग A द्वारा प्रयोग किया जाता)

    तुम भी BD के subrepo रूप A की घोषणा कर सकते हैं, स्वतंत्र रूप से। A (B के संबंध में) में B का कोई परिणाम नहीं होगा D में उपयोग किया जाता है।

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