2010-01-20 6 views
7

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

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

 
$ hg branch chapter-10 
(do chapter 10 stuff) 
$ hg commit -m "Chapter 10 complete" 
$ hg update default 
$ hg merge chapter-10 
$ hg commit -m "Merging chapter 10 into default" 
$ hg push 

एक बार मैं धक्का बयान निष्पादित, मैं मर्क्युरियल से यह संदेश प्राप्त:

 
pushing to ssh://myserver/hg/depot 
searching for changes 
abort: push creates new remote branch 'chapter-10'! 
(did you forget to merge? use push -f to force) 

तो इस बिंदु पर मैं एक hg merge फिर से करने की कोशिश, और तो यह है कि मैं क्या कर रहा हूँ है यह मुझे बताता है कि विलय करने के लिए कुछ भी नहीं है, जो स्पष्ट रूप से सच है क्योंकि मैंने इसे अभी विलय कर दिया है। जब मैं -f के साथ पुश को मजबूर करता हूं, सब कुछ ठीक लगता है, और यहां तक ​​कि वेब इंटरफ़ेस उपयुक्त शाखाएं दिखाता है।

समेट करने के लिए, मेरा प्रश्न सरल है: क्या मैं इसे सही तरीके से कर रहा हूं? क्या Mercurial (यानी "Mercurial रास्ता") के साथ ऐसा करने के लिए एक और अधिक उचित तरीका है? ईमानदारी से मैं सिर्फ भंडार बैकअप के रूप में काम करना चाहता हूँ। मैं वितरित एससीएम मॉडल का प्रशंसक हूं, लेकिन मेरे लिए यह धक्का देने के लिए सॉर्टा "गंदा" लगता है। किसी भी जानकारी की काफी सरहना की जाएगी! अग्रिम में धन्यवाद।

+0

क्या आपका इरादा है: ए) अध्यायों के माध्यम से अपना काम करते समय अपने काम के चेकपॉइंट्स की श्रृंखला रखने के लिए या बी) विभिन्न अध्यायों पर एक साथ संपादन के लिए कई अध्याय खोलने के लिए? – Tarydon

+0

विकल्प ए मेरा इरादा है, लेकिन एक टीम परिदृश्य में मैं विकल्प बी में मूल्य देख सकता हूं साथ ही –

उत्तर

6

push -f आपके मामले के लिए सही विकल्प है, और इस आदेश को जोड़ने के लिए पिछले महीने एक चर्चा हुई थी जब यह "push creates new remote branch" चेतावनी पॉप अप: issue 1513 देखें।

हालांकि, issue 1974 (इस महीने) कुछ अवांछित प्रभावों का उल्लेख करता है (हालांकि आपके मामले में नहीं)।
रिमोट रेपो पर दूसरा सिर बनाने के बारे में और जानने के लिए यह translated article देखें।


अधिक सामान्य बिंदु पर, आप शाखा उपयोग कर सकते हैं अगर आप समानांतर में अपने अध्याय लिख रहे हैं, और आप समय

में लेकिन अगर आपके लेखन की प्रक्रिया केवल कुछ (स्थिर) बिंदु पर उन्हें मर्ज करना चाहते हैं अधिक रैखिक है, आप केवल एक शाखा का उपयोग कर सकते हैं, और रास्ते में कुछ टैग डाल सकते हैं।
हालांकि, क्या आपको अध्याय 10 पर वापस जाना चाहिए और कुछ लाइनें जोड़नी चाहिए, भले ही आप टैग 11 और 12 डाल चुके हों, जिससे इतिहास को पढ़ने में कठिनाई हो जाएगी।तो इस मामले में शाखाएं अभी भी एक अच्छा विचार है।

+1

लिंक के लिए धन्यवाद। बहुत सूचनाप्रद। ऐसा लगता है कि मैं शाखाओं का उपयोग करने की कोशिश कर रहा हूं जहां टैग बेहतर फिट होंगे। –

4

मुझे आपकी विशिष्ट समस्या के बारे में पता नहीं है, लेकिन आपकी टिप्पणियों से ऐसा लगता है कि आप उन शाखाओं का उपयोग करते हैं जहां आप शायद टैग का उपयोग करना चाहते थे।

शाखाएं आमतौर पर तब उपयोग की जाती हैं जब कई लोग एक ही प्रोजेक्ट पर सहयोग करते हैं और आप एक काम अलग करना चाहते हैं ताकि एक व्यक्ति कोड के स्थिर टुकड़े पर काम कर सके, जबकि दूसरा कुछ प्रयोगात्मक है जो अस्थायी रूप से कार्यक्षमता को तोड़ देता है। वैकल्पिक रूप से शाखाओं को रिहाई के लिए स्थिर करने के लिए उपयोग किया जाता है, जबकि ट्रंक में विकास चल रहा है।

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

+0

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

2

इस मामले में मुझे लगता है कि पुश के लिए उपयोग करना पूरी तरह ठीक है। यह सिर्फ नई शाखाएं बनाता है, सिर नहीं। रिमोट हेड बनाना पूरी तरह से एक और मामला है।