2012-01-31 7 views
6

में अवांछित स्थानीय इतिहास को मुख्य भंडार में धक्का देने से बचें, मैं डीवीसीएस में नया हूं इसलिए मैं शायद कुछ अवधारणाओं और शब्दावली को गलत समझ रहा हूं, लेकिन यह विचार है कि मैं क्या हासिल करने की कोशिश कर रहा हूं, और मैं हूं यह पता लगाने की कोशिश कर रहा है कि क्या बाजार या मर्कुरियल इसे सीधे तरीके से समर्थन करता है:बाजार या मर्कुरियल

अच्छी तरह से परीक्षण कोड के साथ मुख्य भंडार है। कहें कि मैं स्थानीय भंडार में क्लोन (या पुल या शाखा या जो भी शब्दावली है) कहता हूं, फिर हर दिन जब मैं कोड पर काम करता हूं तो मैं स्थानीय रूप से बदलता हूं, कभी-कभी दिन में कई बार बदलता हूं।

के बाद मैं अपने सभी परिवर्तन और परीक्षण का कार्य पूरा कर रहा हूँ, मैं सिर्फ नवीनतम (स्थानीय) प्रतिबद्ध मुख्य भंडार में डाल हर फ़ाइल का संस्करण प्राप्त करना चाहते हैं, बिना मध्यवर्ती संस्करणों है कि मैं के दौरान स्थानीय रूप से प्रतिबद्ध के दर्जनों डीबगिंग और यूनिट परीक्षण।

जो मैंने पढ़ा है, जाहिर है कि उन अर्ध-बेक्ड संस्करणों का पूरा इतिहास मुख्य भंडार में दिखाई देगा यदि मैं इसे धक्का देता हूं। कुछ इंटरनेट लेख यह सुझाव देते हैं कि यदि रीबेज सही तरीके से संभाला जाता है तो उस समस्या को संबोधित कर सकता है, लेकिन यह इतना स्पष्ट नहीं है कि यह कैसे किया जा सकता है, जैसा कि ऐसा लगता है कि ऐसा करने के लिए बाईफुरेटेड शाखा/विलय इतिहास से बचने के लिए रीबेज अधिक है मध्यवर्ती संस्करणों के एक बड़े सेट के।

उत्तर

5

कुछ बाज़ार विकल्प।

  1. आप स्थानीय प्रतिबद्ध के दर्जनों से छुटकारा पाने के लिए चाहते हैं, तो आप वास्तव में इतिहास बर्बाद कर रहे हैं। ऐसा करने का एक तरीका bzr uncommit कमांड के साथ है। जैसे।

    bzr uncommit -rbranch:https://url_to_mainrepo 
    

    (rivisions को फेंक दें जब तक आप मुख्य रेपो में संशोधन करने के लिए मिलता है। चिंता मत करो यह आपको बताएंगे कि क्या किया जाना होगा और यह करने से पहले आप इस बात की पुष्टि)

    तो फिर तुम क्या कर सकते हैं सभी के साथ एक नया प्रतिबद्धता एक में गिर गई।

  2. बाज़ार आम तौर पर मर्ज किए गए संशोधन छुपाता है। एक विलयित संशोधन में आपके छोटे काम करने के लिए एक तरीका है मुख्य रिपो की स्थानीय शाखा/चेकआउट रखना। फिर जब आप तैयार हों, bzr merge अपने स्थानीय मुख्य-रेपो-क्लोन में अपने परिवर्तनों में और फिर एक विलय संशोधन करें।

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

    $ bzr log 
    ------------------------------------------------------------ 
    revno: 2 [merge] 
    message: 
        summary of the things I did 
    ------------------------------------------------------------ 
    revno: 1 
    message: 
        some change on the mainline 
    ------------------------------------------------------------ 
    Use --include-merged or -n0 to see merged revisions. 
    

    यहाँ कैसे मिला दिया गया संशोधन को देखने के लिए के उदाहरण है:

यहाँ की कैसे मर्ज किए गए संशोधन नहीं देखने के लिए उदाहरण है

$ bzr log -n0 
------------------------------------------------------------ 
revno: 2 [merge] 
message: 
    summary of the things I did 
    ------------------------------------------------------------ 
    revno: 1.1.2 
    message: 
     my first step 
    ------------------------------------------------------------ 
    revno: 1.1.1 
    message: 
     my second step 
------------------------------------------------------------ 
revno: 1 
message: 
    some change on the mainline 
+0

आपने कहा कि यह "सामान्य रूप से" छुपा हुआ है जिसका मतलब हमेशा छिपा नहीं है? ... विकल्प 2 के साथ, मुख्य भंडार में विलय और प्रतिबद्ध होने के बाद, क्या अप्रत्यक्ष माध्यमों (जैसे लॉग फाइल) के माध्यम से विलय से पहले स्थानीय रूप से प्रतिबद्ध मध्यवर्ती संस्करणों की फ़ाइल सामग्री पहुंच जाएगी? – Gigatron

+0

मर्ज किए गए संशोधन – AmanicA

+0

ठीक या देखने के तरीके के उदाहरण जोड़े गए हैं, इसलिए टिप्पणियों और मेटाडेटा लॉग में देखे जा सकते हैं, लेकिन आधा बेक्ड स्थानीय रूप से चेक-इन संस्करणों का वास्तविक फ़ाइल डेटा मुख्य में दिखाई नहीं देगा रेपो, सही? – Gigatron

5

कीवर्ड आप देख रहे हैं पतन या गुना (मर्क्युरियल) या स्क्वैश (Git) कर रहे हैं। मुझे डर है कि मुझे नहीं पता कि बाज़ार में इसके लिए सामान्य शब्द क्या है।

Mercurial में आप histedit extension (Mercurial 2.3 के बाद से एक बंडल एक्सटेंशन) का उपयोग एक ही परिवर्तन में परिवर्तनों की एक श्रृंखला को फोल्ड करने के लिए कर सकते हैं। यह तीसरे पक्ष collapse extension में कार्यक्षमता का एक सुपरसेट प्रदान करता है।

rebase extension (एक और मानक विस्तार) --collapse ध्वज के साथ समान कार्यक्षमता है। आप पूरी तरह से सही हैं कि अनावश्यक विलय से बचने के लिए आमतौर पर रिबेजिंग किया जाता है, लेकिन इसे किसी भी तरह collapsing (and editing) changesets in Git के लिए उपयोग किया जाना चाहिए। मर्कुरियल के लिए histedit extension गिट में इंटरैक्टिव रिबेस कमांड के बाद मॉडलिंग किया गया है।

+0

दुर्भाग्यवश मर्कुरियल इतिहास संपादन एक्सटेंशन में से कई समस्याएं हैं यदि आपने चीजों को अपनी शाखा में मुख्य रूप से विलय करने जैसी चीजें की हैं। दुर्भाग्यवश –

+0

दुर्भाग्य से, 'एचजी हिस्टिट' या 'एचजी पतन' के साथ मर्कुरियल में फ़ोल्डिंग परिवर्तन फ़ाइल नामों के बारे में जानकारी खो देता है, और इसलिए नामित फ़ाइल का संपादन इतिहास खो देता है। (यह हाल ही में जोड़े जाने पर पूरी सामग्री के साथ एक नई फाइल की तरह प्रतीत होता है)। – Iodnas

+0

@lodnas: मैं इसे 'hg histedit' के साथ पुन: पेश करने में असमर्थ हूं - कृपया इसे ट्रिगर करने के लिए निर्देशों के साथ एक बग रिपोर्ट दर्ज करें: http://bz.selenic.com/ (मैंने पतन का परीक्षण नहीं किया है वैसे ही, यह एक तृतीय-पक्ष एक्सटेंशन है और अब मानक हिस्टिट एक्सटेंशन की तुलना में अधिक छोटी हो सकती है)। –

1

बाज़ार में, यह होने से नियंत्रित किया जाता है स्थानीय रेपो स्थानीय स्तर पर एक अलग "क्लोन" (यानी bzr branch URL) और फिर आप स्थानीय फीचर शाखाएं बनाते हैं जिसमें आप कई कामों के साथ अपना काम करते हैं। जब आप उस काम को मुख्य रेपो में स्थानांतरित करने के लिए तैयार होते हैं, तो आप मुख्य शाखा में फीचर शाखा bzr merge करते हैं। यह आपको मुख्य शाखा में एक संशोधित काम करने वाले पेड़ के साथ छोड़ देता है जिसे आप तब करते हैं और अपने आधिकारिक मुख्य रेपो को धक्का देते हैं। इस प्रतिबद्धता में आपकी सुविधा शाखा से संशोधन इतिहास शामिल है लेकिन यह आमतौर पर bzr log या अन्य लॉग इतिहास दृश्यों में छिपा हुआ है।

+0

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

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