version control मौसमी उपक्षेत्रों: आकस्मिक पुनरावर्ती प्रतिबद्धता रोकें और धक्का




version-control mercurial (4)

मर्कुरियल 2.0 स्वचालित रूप से आपको उप-कोशिकाओं को करने से रोकता है, जब तक कि आप मैन्युअल रूप से --subrepos (या, वैकल्पिक रूप से, -S ) commit करने के commit निर्दिष्ट करते commit

उदाहरण के लिए, आप एक प्रदर्शन करने का प्रयास करते हैं, जब एक सब-स्पेसिटरी में लंबित परिवर्तन होते हैं, आपको निम्न संदेश मिलता है:

# hg commit -m 'change main repo'
abort: uncommitted changes in subrepo hello
(use --subrepos for recursive commit)

आप कमांड को --subrepos जोड़कर सफलतापूर्वक प्रतिबद्ध कर सकते हैं:

# hg commit --subrepos -m 'commit subrepos'
committing subrepository hello

कुछ चीजें अभी भी सावधान रहेंगी: यदि आप संशोधन को बदलते हैं, तो वर्तमान में एक सब-स्पेसिटरी है, परन्तु उप-थैब्सटी की सामग्री नहीं, Mercurial --subrepos flag बिना बिना संस्करण में बदलाव को खुशी से करेगा। इसके अलावा, पुनरावर्ती धक्का अभी भी बिना चेतावनी के प्रदर्शन कर रहे हैं

मैं उन टीमों पर काम करता हूं जहां हमारे पास कई उप-कोशिकाओं के साथ एक मर्क्यूरिअल भंडार में एक कोड है:

main/
main/subrepo1/
main/subrepo1/subrepo2/

मर्क्यूरीयल का डिफ़ॉल्ट व्यवहार यह है कि जब "मुख्य" में एक hg commit किया जाता है, तो subrepositories "subrepo1" और "subrepo2" में कोई भी बकाया परिवर्तन भी प्रतिबद्ध होंगे। इसी तरह, जब "मुख्य" को धक्का दिया जाता है, "उपप्रो 1" और "सबरेपो 2" में कोई भी आउटगोइंग भी धक्का दिया जाएगा।

हम पाते हैं कि लोग अक्सर अनजाने में अपनी उपसभापतियों में परिवर्तन और बदलाव करते हैं (क्योंकि वे भूल गए कि उन्होंने परिवर्तन किए थे, और डिफ़ॉल्ट रूप से hg status पुनरावर्ती परिवर्तन नहीं दिखाती है)। हम यह भी पाते हैं कि ऐसी वैश्विक प्रतिबद्धताएं / धक्का हमारी टीम में लगभग हमेशा आकस्मिक हैं।

मौसमी 1.7 ने हाल ही में hg status -S और hg outgoing -S साथ परिस्थिति में सुधार किया, जो उप-रिपोजिटरी में परिवर्तन दिखाते हैं; लेकिन फिर भी, इसके लिए लोगों को ध्यान देना चाहिए।

क्या सुर्खियों में एक रास्ता है जिससे hg commit और hg push बंद कर दिया जाए यदि उप-प्रस्तुतीकरण में परिवर्तन / प्रतिबद्धताएं हों जो अन्यथा प्रतिबद्ध / धक्का देगी?


pre-commit हुक ( precommit नहीं ) हो सकता है, आपके लिए hg status -S कर सकता है, और प्रतिबद्ध को ब्लॉक कर सकता है अगर यह कोई परिवर्तन का पता लगाता है?


चूषण 1.8 के बाद से एक विन्यास सेटिंग है जो रिकर्सिव कमिट को अक्षम करती है माता-पिता रिपॉजिटरीज में .hg/hgrc आप जोड़ सकते हैं:

[ui]
commitsubrepos = no

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


एक धारणा उन URLs का उपयोग करना है, जिनके लिए आपने अपनी .hgsub फ़ाइलों में केवल पढ़ने के लिए प्रवेश किया है। तब जब आप वास्तव में सबरेपो में धक्का करना चाहते हैं, तो आप इसमें सीडी बस सकते हैं और एक hg push THE_READ_WRITE_URL





mercurial-subrepos