2011-02-02 9 views
49

मेरे पास 3 शाखाओं के साथ एक एचजी रेपो है, लेकिन उनमें से दो निष्क्रिय हैं (क्योंकि मैंने उन्हें पहले ही अपनी डिफ़ॉल्ट शाखा में विलय कर दिया है)। एचजी हेड प्रत्येक शाखा के लिए 3 सिर दिखाता है, भले ही एचजी शाखाएं उन शाखाओं में से 2 को 'निष्क्रिय' के रूप में दिखाती है।एचजी में केवल एक शाखा को कैसे धक्का देना है?

जब मैं अपनी डिफ़ॉल्ट शाखा को धक्का देने की कोशिश करता हूं (एचजी पुश --ब्रैंच डिफ़ॉल्ट http: // ...) किसी अन्य रेपो में, विलय को संदेश के साथ निरस्त कर दिया जाता है "abort: push नई रिमोट शाखाएं बनाता है: ! "

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

मैंने पहले से ही ऐसा कर लिया है, लेकिन मैं अभी भी इसे हटाए बिना ब्रांच डिफ़ॉल्ट को धक्का नहीं दे सकता।

किसी भी मदद की सराहना की जाती है। धन्यवाद!

उत्तर

53

यदि default पर परिवर्तनों को अन्य शाखाओं में पूर्वजों के परिवर्तन हैं तो आपको उन परिवर्तनों को भी धक्का देना होगा। एक रिपो में मौजूद किसी भी बदलाव के लिए इसके सभी परिवर्तनों के बिना भी संभव नहीं है।

तो कोशिश:

hg push --branch default --new-branch 

जो कहते हैं, "हाँ, मैं जानता हूँ कि इस धक्का एक शाखा का नाम है जो दूरस्थ रेपो पहले से पहले नहीं देखा गया भर में भेजता है" (यह भी जरूरी है मर्क्युरियल 1.6 या बाद में IIRC)>

इसके अलावा, आपको उन निष्क्रिय सिर लेने के लिए और कर सकते हैं उन लोगों के साथ सिर बंद कर दिया:

hg update thebranch 
hg commit --close-branch -m 'closing' 

क्योंकि "नाम शाखाओं हमेशा के लिए कर रहे हैं" कई लोगों के लिए उन्हें आरक्षण लंबे रहते थे के लिए चुनें "स्थिर" और "प्रयोगात्मक" जैसी अवधारणाएं और सुविधाओं, रिलीज, और अन्य क्षणिक चीज़ों के लिए बुकमार्क, अनाम शाखाएं या क्लोन का उपयोग करें। उन अन्य विकल्पों पर guide के लिए इसे देखें।

+10

आपका उत्तर सही है, लेकिन इसका मतलब यह नहीं है कि मुझे यह पसंद है;) – simon

+2

पर्याप्त मेला। मैं नामित शाखाओं से पूरी तरह से बचता हूं। मैं शाखा के आदमी के रूप में एक क्लोन हूँ। –

+7

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

0

आप इसे रोक सकते हैं!

1. Pull from your repository 
2. hg push --rev nnn -f (replace nnn with your Rev # of your working branch) 
3. do NOT force before PULLing. if you do things will get out sync and you are screwed 

आप RhodeCode की तरह कुछ का उपयोग कर रहे हैं तो यह इसके लिए मजबूर कर के बाद बाहर की जाँच करें और आप देखेंगे कि आपके नवीनतम शाखा है देखेंगे:

यहाँ कैसे है।

हालांकि मुझे लगता है कि बाद में Mercurial आपको दूसरी शाखा को फिर से धक्का देने के लिए कहने जा रहा है, भले ही आप इसे बंद कर दें, Mercurial उस शाखा को सर्वर पर बनाने का प्रयास करेगा।

मैं एक गिट उपयोगकर्ता भी हूं और उसी स्थिति में भाग गया क्योंकि ग्राहक Mercurial का उपयोग कर रहा है लेकिन मैं गिट वर्कफ़्लो शैली का उपयोग करना चाहता हूं।

मुझे लगता है कि यह करने योग्य है लेकिन मुझे अभी तक 100% का पता नहीं लगा है।

23

एक एकल शाखा तुम सिर्फ का उपयोग बी

hg push -b myBranch 

विशिष्ट समस्या के लिए के रूप में, आप बंद करने शाखाओं में देखना चाहते हो सकता है पुश करने के लिए।मुझे पता है कि SourceTree इसे ऑफ़र करता है, लेकिन मुझे यकीन नहीं है कि

+0

धन्यवाद, यह वह जवाब था जिसे मैं ढूंढ रहा था। बस एक शाखा को धक्का कैसे करें। –

+0

यह मेरे लिए काम नहीं करता है। अभी भी '- new-branch' – Mahm00d

+1

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

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