व्यापारिक: क्या मैं एक शाखा का नाम बदल सकता हूं?


204

अब हमारे पास एक "स्टिचिंग" शाखा है, जहां "स्टेजिंग" एक बेहतर शब्दार्थक प्रतीत होता है। इसे संभालने के लिए एक अच्छी रणनीति क्या है?

जवाबों:


223

stigingशाखा को अपडेट करें और इसकी एक नई शाखा बनाएं। फिर पुरानी शाखा को बंद करें।

संक्षेप में:

hg update stiging
hg branch staging
hg commit -m"Changing stiging branch to staging."
hg update stiging
hg commit --close-branch -m"This was a typo; use staging instead."
hg push --new-branch

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

2
क्या मर्क्यूरियल एक बंद शाखा के नाम का पुन: उपयोग करने की अनुमति देगा? Ie, यदि आपके पास v3 शाखा है, तो क्या आप उपरोक्त तकनीक का उपयोग करके इसे v4 में बदल सकते हैं और फिर एक बंद v3 को पीछे छोड़ देने के बावजूद एक नई v3 शाखा को बंद कर सकते हैं?
जोशुआ गोल्डबर्ग

4
@JoshuaGoldberg, 3noch गलत है। मर्क्युरियल होगा आप एक बंद शाखा का नाम पुन: उपयोग करने के लिए यदि आप का उपयोग की अनुमति देते हैं --force। उदाहरण के लिए hg branch --force v3:। यह hg update v3नई v3शाखा में अपडेट हो जाएगा , जैसा कि आप चाहते थे।
गिली

2
hg मदद शाखा के साथ @ Gili की टिप्पणी की पुष्टि की: "- अगर यह एक मौजूदा शाखा को छाया करता है तो भी शाखा का नाम सेट करें"
जोशुआ गोल्डबर्ग

7
अगर आप stigingब्रांचिंग से पहले बंद हो जाते हैं , तो आपको "ढीला अंत" नहीं मिलता है
अधिकतम। 11

60

भविष्य के पाठकों के लिए: rebaseविस्तार के साथ , आप एक ही माता-पिता के साथ एक नई शाखा बना सकते हैं stigingऔर पूरी शाखा इतिहास को इस तरह स्थानांतरित कर सकते हैं :

hg update -r "parents(min(branch('stiging')))"
hg branch staging
hg commit
hg rebase --source "min(branch('stiging'))" --dest staging

यह मानता है कि stigingकेवल एक माता-पिता हैं। बेशक आप इसके बजाय केवल स्पष्ट संशोधन संख्या का उपयोग कर सकते हैं।

नोट 1: शाखा तो stigingअन्य शाखाओं के साथ मर्ज के भी शामिल है, मैं लगता है कि यह उन्हें सुरक्षित करेगा, जब तक कि stagingऔर stigingएक ही मूल है। लेकिन मैं निश्चित रूप से डबल-चेक करूंगा।

नोट 2: चूंकि यह इतिहास संपादित करता है, इसलिए पुरानी शाखा क्लोन किए गए रिपॉजिटरी ( rebaseप्रलेखन देखें ) से गायब नहीं होगी । जब तक हर कोई नए सिरे से क्लोन नहीं कर सकता, यह एक बड़े समूह के लिए बहुत व्यावहारिक समाधान नहीं हो सकता है।

Note3 / Edit (@JasonRCoombs के सौजन्य से): अब जब चरण मानक में मानक हैं, rebaseतो पहले से धकेल दिए गए परिवर्तनों को संशोधित करने से इनकार कर देंगे। या तो इसे चरणबद्ध तरीके से बदलकर ड्राफ्ट ( hg phases) के साथ बदल दें, या पुरानी शाखा को वहीं रहने दें, और बस एक ठीक से नामांकित प्रतिलिपि बनाएं (उदाहरण के लिए, `hg rebase --keep 'के साथ)।


छोटी टीमों के लिए +1 जहां आप उपयोगकर्ताओं को क्लोन करने के लिए मजबूर कर सकते हैं यह एक अच्छा विचार है - या hg convertइसके बजाय उपयोग करें ।
hochl

5
मर्क्यूरियल के देर से संस्करणों के साथ, रिबास कमांड "विफल नहीं हो सकता है" अपरिवर्तनीय बदलाव को रिबेट नहीं कर सकता है यदि स्थानांतरित किए जाने वाले परिवर्तन "सार्वजनिक" हैं। या तो उन्हें मसौदा तैयार करने के लिए मजबूर करें (एचजी चरणों के साथ) या --keepरिबेस कमांड को पास करें, जो परिवर्तनों को स्थानांतरित करने के बजाय कॉपी करेंगे।
जेसन आर। कोम्बस

चरण 4 पर abort: can't rebase immutable changeset 11b1e2b7dc4f:। ध्यान दें कि मैंने इस एक में दूसरी शाखा से परिवर्तनकारी परिवर्तन किया है। इसके अलावा, यह विभाजित और मुक्त विलय है।
मार्क जेरोनिमस

@ मार्क, ऊपर नोट 3 पर एक नज़र डालें।
एलेक्सिस

6
नई शाखा पर एक परिवर्तन करने और फिर उसके शीर्ष पर पुन: स्थापित करने के बजाय, आप इसे छोड़ सकते हैं और .अपने --destमूल्य के लिए उपयोग कर सकते हैं और छूट स्वचालित रूप से नई शाखा के नाम पर ले जाएगी।
वेबर 2

16

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


1
यह एक दिलचस्प समाधान है, क्या आप थोड़ा और विस्तृत कर सकते हैं?
DrM

15

"स्टेजिंग" नामक एक नई शाखा बनाएं और दूसरे को भूल जाएं ...


+1 यह है कि मैं क्या करूँगा। पुराने परिवर्तनों में अभी भी पुराने ब्रांच का नाम होगा, लेकिन नए लोगों का नया ब्रांच नाम होगा।
बरजक 12

6

यह इतिहास को संशोधित करता है और केवल उन्नत Mercurial उपयोगकर्ताओं के लिए है। अगर आपको इसका मतलब नहीं पता है तो ऐसा न करें।

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

hg update {SHA-1 of the ancestor changeset}
hg branch staging
hg graft {first changeset in stiging} ... {stiging head-1} {stiging head}
hg strip {first changeset in stiging}
hg push --new-branch

1
चरण 3 के लिए आप उपयोग कर सकते हैंhg graft {first changeset in stiging}..{stiging head}
KCD
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.