mercurial मैं मर्क्यूरियल के भंडार का उप-फ़ोल्डर कैसे क्लोन कर सकता हूं?




clone dvcs (6)

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

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

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

https://code.i-harness.com

मेरे पास एक मर्क्यूरियल रिपॉजिटरी है जिसमें मुट्ठी भर संबंधित परियोजनाएँ हैं। मैं इन परियोजनाओं में से किसी एक पर काम करना चाहता हूं।

क्या क्लोनिंग रिपॉजिटरी का सिर्फ एक हिस्सा है, और क्या इसे हासिल करने का सही तरीका है?


आंशिक क्लोन करने के बजाय, आप उप-रिपॉजिटरी द्वारा अपने रेपो को एक से अधिक रेपो में विभाजित करने के लिए कन्वर्ट एक्सटेंशन का उपयोग कर सकते हैं।

विशेष रूप से, अनुभाग देखें, मर्क्यूरियल से परिवर्तित :

किसी मौजूदा की सबसेट पाने के लिए मर्क्यूरियल रिपॉजिटरी को फ़िल्टर करना भी उपयोगी है। उदाहरण के लिए एक रिपॉजिटरी फू के एक उपनिर्देशिका उप-पाठ को अपने स्वयं के जीवन के साथ एक रिपॉजिटरी में बदलने के लिए (अपना पूरा इतिहास रखते हुए), निम्नलिखित करें:

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

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

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

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

[extensions]
hgext.convert=

इसके बाद एक map.txt फ़ाइल बनाएं

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

(ध्यान दें कि आप विंडोज पर भी फ़ॉरवर्ड स्लैश का उपयोग कर सकते हैं) और चलाएं

$ hg convert --filemap map.txt your-big-repo foo

यह your-big-repo से libs/foo फ़ोल्डर के पूरे इतिहास के साथ एक रिपॉजिटरी बना देगा।

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

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


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

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



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

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





dvcs