2011-01-06 8 views
5

सबवर्जन के पूर्व उपयोगकर्ता के रूप में, हमने एससीएम के लिए Mercurial में जाने का फैसला किया है और यह हमें थोड़ा उलझन में डाल रहा है। यद्यपि Mercurial एक वितरित एससीएम उपकरण है, हम सर्वर पर बैक अप लेने वाले बदलावों को रखने के लिए रिमोट रेपो का उपयोग कर रहे हैं, लेकिन हमें कुछ परेशानी की समस्याएं मिल रही हैं।एक दूरस्थ Mercurial भंडार के साथ सिंक में रहने के लिए सही (सर्वोत्तम अभ्यास?) प्रक्रिया?

उदाहरण के लिए, जब हम दो या तीन हमारे स्थानीय रेपो पर काम करते हैं, तो हम रिमोट रेपो को धक्का देते हैं, हम पाते हैं कि बहुत सारे सिर (?) बनाए जाते हैं। इसने हमें नरक को भ्रमित कर दिया और हमें इसे हल करने के लिए कुछ विलय आदि करना पड़ा।

इतने सारे सिर से बचने और रिमोट रेपो को कई डेवलपर्स के साथ सिंक करने का सबसे अच्छा तरीका क्या है?

आज, मैं इस तरह काम कर रहा है:

  1. बदलें एक फ़ाइल।
  2. रिमोट रेपो से खींचें।
  3. स्थानीय कामकाजी प्रति अपडेट करें।
  4. मर्ज करें? (क्यों?)
  5. स्थानीय रिपो में मेरे परिवर्तनों को कम करें।
  6. रिमोट रेपो पर पुश करें।

क्या यह सबसे अच्छी कार्यवाही है?

हालांकि इसने आज ठीक काम किया है, मैं यह महसूस करने में मदद नहीं कर सकता कि मैं इसे गलत कर रहा हूं! ईमानदार होने के लिए मुझे समझ में नहीं आता कि पुल चरण में क्यों विलय करना आवश्यक है क्योंकि अन्य लोग विभिन्न फाइलों पर काम कर रहे हैं?

मुझे आरटीएफएम को बताने के अलावा क्या आपको Mercurial का उपयोग करने के लिए कोई सुझाव है? हमें इतने सारे सिर क्यों मिलते हैं, इस बारे में जानकारी के लिए कोई अच्छा ऑनलाइन संसाधन?

नोट: मैंने मैनुअल पढ़ा है लेकिन यह वास्तव में ज्यादा जानकारी नहीं देता है और मुझे नहीं लगता कि मैं मिनट में एक और पुस्तक शुरू करना चाहता हूं।

+1

http://hginit.com पर जोएल स्पॉल्स्की का ट्यूटोरियल सीखने के लिए एक शानदार जगह है कि कैसे काम करता है, और जहां तक ​​मुझे याद है, इसमें कई सिर और दर्द रहित विलय के बारे में अच्छी व्याख्या शामिल है http://hginit.com/ 04.html –

+0

आपको चरण 1 और 2 के बीच कोई प्रतिबद्धता होनी चाहिए। चरण 5 पर प्रतिबद्धता केवल तभी जरूरी होनी चाहिए जब आपको फ़ाइलों को मर्ज करने की आवश्यकता हो –

उत्तर

11

आपको निश्चित रूप से कुछ सीखने के संसाधन मिलना चाहिए।

मैं निम्नलिखित की सिफारिश कर सकते हैं:

अपने ठोस सवाल का सवाल है, "यह सबसे अच्छा प्रक्रिया है", तो मैं नहीं कहने के लिए होता है।

यहां कुछ सुझाव दिए गए हैं।

सबसे पहले, आपको हर समय केंद्रीय भंडार के साथ "सिंक में" रहने की आवश्यकता नहीं है। इसके बजाय, इन दिशानिर्देशों का पालन करें:

  • जब आप अपने द्वारा किए गए परिवर्तनों से खुश होते हैं तो अपने स्थानीय भंडार से केंद्रीय में पुश करें। याद रखें, यह कई बदलाव
  • खींच सकता है यदि आपको तुरंत दूसरों द्वारा किए गए परिवर्तनों की आवश्यकता है, यानी। आपके स्वयं के काम को जारी रखने के लिए, आपके एक सहयोगी को एक बगफिक्स तय किया गया है, जिसे आपको चाहिए।
  • पुल धक्का से पहले
  • किसी भी अतिरिक्त सिर आप अपने खुद के परिवर्तन के साथ नीचे खींच लिया मर्ज, इससे पहले कि आप धक्का, या

काम कर रहे दूसरे शब्दों में जारी रखने के लिए, यहाँ एक ठेठ दिन है।

जब आप सुबह में आते हैं तो आप नवीनतम परिवर्तन खींचते हैं, ताकि आपको स्थानीय क्लोन अद्यतित हो। आप हमेशा ऐसा नहीं कर सकते हैं, अगर आप बड़े बदलावों के बीच में हैं जो आपने कल खत्म नहीं किया था।

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

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

इसके बजाय आप खींचें। यह हमेशा किया जा सकता है, लेकिन निश्चित रूप से अब सर्वर के बजाय आपके स्थानीय क्लोन में अतिरिक्त सिर जोड़ देगा।

फिर आप अपने सिर के साथ सर्वर से प्राप्त अतिरिक्त सिर को विलय करते हैं, जिसे आपने अपने क्लोन में नए बदलाव करके दिन के दौरान बनाया था। आप किसी मर्ज टकराव को हल करते हैं।

फिर आप धक्का देते हैं, और अब यह सफल होना चाहिए। जब आप विलय में व्यस्त थे, तो किसी ने मौके पर केंद्रीय भंडार में अधिक बदलाव लाने में कामयाब रहे, तो आपको एक और गर्भपात मिलेगा और कुल्ला और दोहराना होगा।

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

क्यों आपको विलय करने की आवश्यकता है? खैर, Mercurial हमेशा उन परियोजनाओं के साथ काम करता है जो पूरे प्रोजेक्ट के स्नैपशॉट हैं, जिसका मतलब है कि दो शाखाएं हैं, भले ही उनमें विभिन्न फाइलों में बदलाव शामिल हैं, वास्तव में पूरी परियोजना के दो अलग-अलग संस्करणों को माना जाता है, और आपको Mercurial को यह बताना होगा कि इसे गठबंधन करना चाहिए उन्हें एक संस्करण में वापस जाने के लिए।

4

एक के लिए, आप किसी भी समय खींच सकते हैं; खींचने से आपके रेपो में केवल बदलाव जोड़े जाते हैं, लेकिन आपकी स्थानीय कामकाजी फाइलों को नहीं बदला जाता है (सिवाय इसके कि यदि आपने पोस्ट-पुल अपडेट को एनाब किया है)।

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

तो वर्कफ़्लो उतना कठोर नहीं है जितना आपने इसे प्रदर्शित किया है; के रूप में आप की तरह

  • परिवर्तन करें और स्थानीय स्तर पर जितनी बार आप की तरह
  • जब आपके बदलाव एकीकृत किया जाना चाहिए, गंतव्य शाखा के साथ विलय (कम किया जा सकता है के लिए प्रतिबद्ध

    • पुल के रूप में ज्यादा: इसे और अधिक इस तरह है नवीनतम से संशोधन),

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

  • 2

    http://hginit.com में एक अच्छा ट्यूटोरियल है।

    विशेष रूप से, आप कदम की सूची मिलेगी आप यहाँ हैं: http://hginit.com/02.html

    उन कदमों के बीच का अंतर (पृष्ठ के तल पर) और तुम्हारा है कि आप वास्तव में चरण 1 के बाद प्रतिबद्ध चाहिए पुल/मर्ज/पुश चरण पर जाने से पहले आप आमतौर पर अपने स्थानीय भंडार पर कई बार प्रतिबद्ध होंगे। आपको तुरंत बाकी डेवलपर्स के साथ हर प्रतिबद्धता साझा करने की आवश्यकता नहीं है। यह अक्सर कई संबंधित परिवर्तन करने के लिए समझ में आता है और फिर उस पूरी चीज को धक्का देता है।

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