2009-05-28 11 views
58

मेरे पास एक मर्कुरियल रिपोजिटरी है जिसमें कुछ संबंधित परियोजनाएं हैं। मैं इन परियोजनाओं में से किसी एक को कहीं और काम करने के लिए शाखा बनाना चाहता हूं।मैं Mercurial में एक भंडार के उप-फ़ोल्डर कैसे क्लोन कर सकते हैं?

क्या एक भंडार का हिस्सा केवल क्लोनिंग कर रहा है, और क्या यह हासिल करने का सही तरीका है?

+0

मैं क्या सुना है से, यह भी एक कारण है एक रेपो में कई परियोजनाओं नहीं डाल करने के लिए है। –

उत्तर

51

आप जो चाहते हैं वह narrow or partial clone है, लेकिन दुर्भाग्यवश यह अभी तक समर्थित नहीं है।

आप पहले से ही एक बड़ा भंडार है और आप महसूस करते हैं कि यह कई छोटे खजाने में मतलब होता है कि विभाजित करने के लिए है, तो आप उपयोग कर सकते हैं convert extension मर्क्युरियल रूपांतरण करने के लिए एक मर्क्युरियल क्या करना है। ध्यान दें कि यह एक नई भंडार foo बनाता है और आप your-big-repo और foo के बीच धक्का नहीं कर सकते हैं/पुल।

convert extension डिफ़ॉल्ट रूप से सक्षम नहीं है तो अपने रेपो के hgrc फ़ाइल में निम्न या अपने mercurial.ini फ़ाइल जोड़ें:

[extensions] 
hgext.convert= 

फिर

include "libs/foo" 
rename "libs/foo" . 

(ध्यान दें कि आप उपयोग कर सकते हैं के साथ एक map.txt फ़ाइल बनाने विंडोज़ पर भी आगे की कमी) और

$ hg convert --filemap map.txt your-big-repo foo 
चलाएं

इससे foo से libs/foo फ़ोल्डर के पूर्ण इतिहास के साथ एक संग्रह होगा।

यदि आप fooyour-big-repo से सभी सबूत हटाना चाहते हैं तो आप निर्देशिका से छुटकारा पाने के लिए exclude libs/foo का उपयोग करके एक और रूपांतरण कर सकते हैं।

आपको लगता है कि जैसे कई खजाने हैं और आप उन्हें, एक पूरे के रूप में उपयोग करने तो आप subrepositories पर गौर करना चाहिए चाहते हैं। यह सुविधा आपको चेकआउट में अन्य रिपॉजिटरीज़ को शामिल करने देती है - इसी प्रकार svn:externals कार्य के समान। कृपया उस विकी पेज पर recommendations का पालन करें।

+0

धन्यवाद - मुझे जो करना है उसके लिए मुझे एक कामकाज मिला है। शामिल मुद्दों को देखने में दिलचस्प है। –

+27

क्या कामकाज आप के साथ आने में सक्षम थे? –

+20

अरग! "मैंने इसका एक अद्भुत सबूत खोज लिया है, जो इस मार्जिन को शामिल करने के लिए बहुत संकीर्ण है।" – Matt

3

यह संभव नहीं है, hg clone पूरे भंडार को क्लोन कर देगा।

आप एक एक उप भंडार विस्तार आप भंडार है, जो अपनी आवश्यकताओं से मेल करने वाले के अंदर खजाने की अनुमति देता है कि देखने के लिए ले जा सकते हैं।

11

इसके बजाय एक आंशिक क्लोन करने का, आप उप भंडार द्वारा एक से अधिक रेपो में अपने रेपो विभाजित करने के लिए Convert Extension उपयोग कर सकते हैं।

यह भी मर्क्युरियल खजाने फिल्टर करने के लिए पहले से मौजूद किसी के सबसेट प्राप्त करने के लिए उपयोगी होता है:

विशेष रूप से, अनुभाग, Converting from Mercurial देखते हैं। उदाहरण के लिए अपने स्वयं के जीवन के साथ भंडार में भंडार foo की उपनिर्देशिका subfoo को बदलने के लिए के लिए (जबकि इसकी पूर्ण इतिहास रखने के लिए), निम्न करें:

$ echo include subfoo > /tmp/myfilemap 
$ echo rename subfoo . >> /tmp/myfilemap 
$ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo 
2

यह सीधे Convert extension के साथ आगे है।

+0

यह एक बहुत ही वैध समाधान है, इसे -1 क्यों मतदान किया गया था? – cheenu

+1

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

+5

1) ऊपर बताए गए अनुसार आप मूल प्रश्न पूछे गए सवाल का जवाब नहीं दे रहे हैं। 2) आप यह नहीं समझाते कि मूल प्रश्न पूछा गया असंभव है। आप बस कुछ अलग पेशकश करते हैं। 3) आप वास्तव में व्याख्या करने के बजाय, एक लिंक देते हैं। –

6

मैं इस मुद्दे करवाते हैं ठोकर खाई है और एक तरह से यह करने के लिए मिल गया: सिमलिंक का उपयोग करना (लिनक्स केवल दुर्भाग्य से)

उदाहरण के लिए, यदि आप केवल किसी अन्य रूप में रेपो भंडार में /project की जरूरत है, आपके कंप्यूटर क्लोन पर फ़ोल्डर, फिर ln -s /repo/location/ project का उपयोग करें। मर्क्युरियल संभाल यह

1

(देर से 2016) मेनलाइन मर्क्युरियल अभी भी "संकीर्ण क्लोन" के लिए समर्थन पैकेज नहीं करता है लेकिन वहाँ तीसरे पक्ष एक्सटेंशन है कि अलग अलग तरीकों से समस्या से निपटने के हैं।

तुम सिर्फ एक संकीर्ण चेकआउट (उर्फ "विरल चेकआउट" या "फ़ाइल पथ द्वारा आंशिक चेकआउट") तो फेसबुक के hg-experimental repository से sparse.py विस्तार (hgext3rd/ निर्देशिका के अंदर देखो) के साथ सामना कर सकते हैं व्यावहारिक हो सकता है। इस परिदृश्य में, आप अभी भी पूर्ण इतिहास को क्लोन करते हैं (इस प्रकार .hg निर्देशिका कोई छोटा नहीं है) लेकिन आपकी कार्यशील निर्देशिका केवल पूर्ण भंडार के उप-समूह पर दिखाती है/कार्य करती है।

वैकल्पिक रूप से Google ने NarrowHG extension बनाया है जो क्लोनिंग (उर्फ "फ़ाइल पथ द्वारा आंशिक क्लोनिंग") संकीर्ण करता है। आप सर्वर, ग्राहक के नियंत्रण में हो सकता है और प्रयोगात्मक सुविधाओं का उपयोग करने के लिए तैयार होने की आवश्यकता होगी लेकिन यह वास्तव में क्या मूल भंडार में था के सबसेट .hg में क्लोन के प्रतिलिपि बनाई इतिहास को प्रतिबंधित करता है।

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