2009-08-19 9 views
19

मान लीजिए कि मेरे पास कई उपनिर्देशिकाओं के साथ स्रोत नियंत्रण में एक परियोजना है, जिनमें से कई मुझे इस समय की आवश्यकता नहीं है।क्या बाजार, मर्कुरियल या गिट के साथ आंशिक क्लोन/शाखा करना संभव है?

मैं एक कार्यशील प्रतिलिपि बनाना चाहता हूं जिसमें केवल कुछ पेड़ शामिल हैं, जो अभी भी परिवर्तन करने की क्षमता बनाए रखते हैं, उन्हें प्रतिबद्ध करते हैं, और उन्हें वापस धक्का देते हैं।

क्या यह संभव है और यदि ऐसा है, तो मैं इसे कैसे कर सकता हूं?

मैं अभी भी निर्णय ले रहा हूं कि बाजार या मर्कुरियल के साथ जाना है, तो उनमें से किसी के बारे में उत्तर उपयोगी होगा।

संपादित करें: वास्तव में, गिट के लिए समाधान भी उपयोगी होंगे।

उत्तर

10

यदि आपके पास पहले से ही एक भंडार है और आप यह करना चाहते हैं, तो यह दर्द होगा।

यदि आप ब्रांड नए भंडारों के साथ ऐसा करने जा रहे हैं, तो आप Mercurial के नए subrepos पर देखना चाहेंगे।

मूल रूप से आप कुछ निर्देशिकाओं के लिए स्टैंडअलोन खजाने बनाएँ:

myproject/ 
    .hg/ 
    source code/ 
     ... files here ... 
    documentation/ (subrepo) 
     .hg/ 
     ... files here ... 
    graphics/ (subrepo) 
     .hg/ 
     ... files here ... 

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

6

this wiki page से निर्णय लेते हुए, यह सुविधा अभी तक Mercurial में लागू नहीं हुई है, हालांकि extension है जो वास्तविक शाखाओं की बजाय एक भंडार या उसके हिस्से को 'रूपांतरित' करके लगभग वही कर सकता है। चूंकि यह एचजी से और एचजी में परिवर्तित हो सकता है, यह आंशिक क्लोनिंग के रूप में काम कर सकता है। क्या आपको इसकी आवश्यकता है?

+2

यह एक उपयोगी जवाब है, लेकिन महत्वपूर्ण चेतावनियों को ध्यान दें: 'एचजी कन्वर्ट' आपको एक रिपोजिटरी हां के केवल एक हिस्से का क्लोन प्राप्त करने देता है, लेकिन परिवर्तनों में मूल में परिवर्तनों के समान SHA-1 आईडी नहीं होंगे। आप मूल भंडार (कम से कम सुरक्षित रूप से नहीं) पर वापस धक्का नहीं दे सकते हैं, हालांकि आप अपने द्वारा किए गए परिवर्तनों को वापस ट्रांसप्लेंट करने का प्रयास कर सकते हैं (उदा। 'एचजी ट्रांसप्लेंट' के साथ)। हालांकि यह दीर्घकालिक क्लोन के लिए आदर्श नहीं है। – quark

4

अधिकांश डीसीवीएस में, नियम "1 प्रोजेक्ट == 1 रिपोजिटरी" है। "सबप्रोजेक्ट" की कोई धारणा नहीं है (सबवर्सन के विपरीत जहां आप एक सबट्री चेकआउट कर सकते हैं और उस पर काम कर सकते हैं)।

मुख्य कारण यह है कि आपके "प्रोजेक्ट" में रूट फ़ोल्डर में संपूर्ण भंडार की एक प्रति शामिल है। चीजें बहुत जटिल हो जाएंगी यदि आप सबफ़ोल्डर में संपूर्ण भंडार की प्रतियां बना सकते हैं।

प्लस तरफ, काम करने वाली प्रतियां बनाना एक तेज़ ऑपरेशन है (जब तक अंतर्निहित फाइल सिस्टम धीमा न हो)।

14

पेड़ के उप-समूह को क्लोन करना संभव नहीं है, जहां तक ​​मुझे पता है, लेकिन अन्य संभावनाएं हैं।

Git: आदेश git clone एक --depth झंडा है:

--depth <depth>

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

बाज़ार: checkout आदेश के लिए झंडा --lightweight केवल एक काम के बजाय निर्देशिका पूरे इतिहास डाउनलोड करता है और बैंडविड्थ और डिस्क स्थान की बचत होती है। सभी परिचालन अभी भी समर्थित हैं, लेकिन उन्हें करने के लिए एक नेटवर्क कनेक्शन की आवश्यकता है।

मुझे नहीं पता कि मूरूरियल में यह सुविधा है या नहीं।

3

बाजार के लिए, आपने पेड़ घोंसले हैं: http://bazaar-vcs.org/NestedTreesDesign जो आपको उप-परियोजनाओं में एक बड़ी परियोजना को विभाजित करने की अनुमति देता है।
मैंने अभी तक इस सुविधा का उपयोग नहीं किया है, इसलिए मुझे नहीं पता कि यह कितना अच्छा काम करता है।

आप फाइलों का एक समूह कॉपी करने से बचने के लिए - हर्डलिंक का उपयोग करके शाखा भी बना सकते हैं (सुनिश्चित नहीं है कि यह विंडोज पर काम करता है ...), इतिहास के बिना शाखा (लाइटर शाखा) या काम करने वाले पेड़ के बिना शाखा (कोई फाइल, केवल इतिहास)।

+3

यह अन्य डीवीसीएस में भी समर्थित है: यह ** गिट ** में गिट-सबमिशन है, और मुझे लगता है ** ** Mercurial ** में वन एक्सटेंशन। लेकिन यह केवल मूल पोस्टर के बारे में पूछने से संबंधित है, मुझे लगता है, क्योंकि इसे अतिरिक्त सेटअप * अपफ्रंट * की आवश्यकता है। –

+0

इन पेजों में वर्णित हैं जिनसे मैं लिंक करता हूं। मैंने अभी कोशिश की: मौजूदा परीक्षण पेड़ पर विभाजित विभाजन, परिवर्तन किया, फिर उप-पेड़ को ब्रांच किया, यह काम किया। बीएफआर के लिए कम से कम ऐसा करने की ज़रूरत नहीं है। – PhiLho

+2

@ जकूब: आपको वन विस्तार की आवश्यकता नहीं है किसी भी mroe - SubRepos 1.3 में Mercurial कोर में जोड़ा गया था। –

5

Git में, आप git subtree उपयोग कर सकते हैं, जिससे आप बस एक विशेष subproject के लिए एक "आभासी" भंडार को निकालने के लिए, तो subproject में परिवर्तन करते हैं और फिर उन परिवर्तनों को वापस मर्ज में देता है।

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

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