2011-12-17 8 views
7

यदि मैं Mercurial के साथ यह संभव है तो मैं उत्सुक हूं। मैं एक प्रोजेक्ट में एक सब्रेपोज़ करना चाहता हूं जो हमेशा मैन्युअल रूप से निर्दिष्ट परिवर्तनों के लिए तय किया जाता है, या बेहतर अभी तक - टैग।Mercurial subrepository को हमेशा एक निश्चित परिवर्तन या टैग को इंगित करने के लिए कैसे करें?

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

उत्तर

3

सब्रेपिटिटरीज बिल्कुल वैसे ही काम करते हैं जैसे आप चाहते हैं।

Mercurial स्वचालित रूप से टिप पर सबप्रो को अपडेट नहीं करता है। यह हमेशा आपके द्वारा चुने गए परिवर्तनों पर रहता है। documentation से:

Subrepos स्वचालित रूप से अपने सूत्रों के नवीनतम changeset ट्रैक नहीं करते। इसके बजाए, उन्हें उन परिवर्तनों में अपडेट किया गया है जो से संबंधित हैं जो शीर्ष-स्तरीय परिवर्तन में परिवर्तन किए गए परिवर्तन के साथ हैं। यह डेवलपर हमेशा अपडेट करते समय संगत कोड और लाइब्रेरीज़ का एक सतत सेट प्राप्त करते हैं।

प्राप्त करने के लिए आप क्या चाहते हैं, तो आपको निम्न चरणों का पालन करें कर सकते हैं:

  1. echo subrepo = https://example.com/subrepo/repo/path > .hgsub
  2. hg add .hgsub
  3. hg clone https://example.com/subrepo/repo/path subrepo
  4. hg -R subrepo update mytag
  5. hg commit

यह निर्दिष्ट रिपॉजिटरी की सामग्री के साथ एक सबrepo निर्देशिका बनाएगा जो mytag टैग पर तब तक रहेगा जब तक आप मैन्युअल रूप से को किसी अन्य चीज़ पर अपडेट नहीं करते हैं!

जो लोग आपके भंडार को क्लोन करते हैं, वे आपके जैसे ही परिवर्तन (यानी mytag) पर subrepo होगा।

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