2010-12-08 19 views
5

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

तो वहाँ TortoiseHg में या कमांड लाइन से एक आसान तरीका मैन्युअल रूप से प्रतिबद्ध है और प्रत्येक शाखा पर पास किए बिना जल्दी से कई शाखाओं को बंद करने के लिए है?

जो के समापन शाखा विकल्प इस्तेमाल किया जा सकता:

+2

यदि आपके पास पर्याप्त नामित शाखाएं भ्रमित या ब्राउज़ करने में मुश्किल हैं, तो संभवतः आप नामित शाखाओं का उपयोग खराब तरीके से कर रहे हैं। एक डीवीसीएस के पीछे विचारों में से एक यह है कि जब भी आप क्लोनिंग करके आसानी से काम करना चाहते हैं, तो आप अज्ञात शाखाएं बना सकते हैं, जिसे आप स्वतंत्र रूप से काम कर सकते हैं और फिर फीचर पूरा होने के बाद श्रृंखला को वापस धक्का दे सकते हैं, अब बेकार अज्ञात शाखा को बिना किसी चिंता के हटा सकते हैं । – dimo414

उत्तर

7

दुर्भाग्य से नहीं।

आपको उस शाखा पर अपनी प्रतिबद्धता के साथ प्रत्येक शाखा को अलग से बंद करने की आवश्यकता है।

for %%f in (branch1 branch2 branch4) do (
    hg up "%%f" 
    if exitcode 1 goto quit 
    hg commit --close-branch -m "closing branch %%f" 
    if exitcode 1 goto quit 
) 
:quit 

कार्यप्रवाह मैं उपयोग करने के लिए बुकमार्क एक्सटेंशन का उपयोग करने के लिए है:

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

इस तरह मेरे पास मेरे इतिहास को अपनाने वाली नामित शाखाओं का समूह नहीं है, मुझे उन्हें बंद करने के लिए याद रखना नहीं है, और मुझे केवल उन शाखाओं का ट्रैक रखना है जिन्हें मैं स्थानीय रूप से उपयोग करता हूं।

+0

+1 स्वचालित रूप से शाखा को बंद करने पर अंतिम भाग मिस गया।मैंने हमेशा विकास की लाइनों के लिए शाखा का उपयोग करने के बारे में दावा किया है जो लंबे समय तक जीवित रहेगा। – pyfunc

2

सभी संभव विकल्पों के लिए निम्नलिखित देखें।

hg up -C badbranch 
hg commit --close-branch -m 'close badbranch, this approach never worked' 
hg up -C default # switch back to "good" branch 

इसके अलावा, मेरी समझ से किया गया है कि यह सबसे काम के लिए क्लोन और विकास के केवल कुछ संभावित लंबे रहते थे गाड़ियों के लिए नामित शाखाओं उपयोग करने के लिए बेहतर है।

+0

हाँ, मैं अपने स्वयं के काम के लिए स्थानीय बुकमार्क का उपयोग करता हूं और केवल बड़ी सुविधाओं के लिए शाखाएं नामित करता हूं, सामान्य दिन-प्रति-दिन बगफिक्सिंग के लिए नहीं। –

1

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

$branches = hg branches -a | sort 
$exclude = "default" 

foreach ($item in $branches) 
{ 
$branch = $item.Split([string[]] " ", [StringSplitOptions]::RemoveEmptyEntries)[0] 

if(!$exclude.Contains($branch)) 
{ 
    hg update $branch 
    hg commit --close-branch -m "closing old branch" 
    hg status 
    Write-Host $branch 
} 
} 

hg push 
+0

क्या यह उन शाखाओं को बंद करने में विफल नहीं होगा जिनके नाम पर कोई स्थान था? मैं इसे बैश में करने की कोशिश कर रहा हूं और मैं एचजी शाखाओं के उत्पादन पर फंस रहा हूं। प्रत्येक आइटम वास्तव में <वैकल्पिक 'निष्क्रिय' टैग> रूप में है। एचजी दस्तावेज एक प्रयोगात्मक - टेम्पलेट कमांड लाइन तर्क के बारे में कुछ कहता है, लेकिन Mercurial का मेरा संस्करण इसका समर्थन नहीं करता है ... – CodeOtaku

0

ठीक है तो यह देर हो चुकी है, लेकिन मैंने इसे बैश के माध्यम से करने के लिए तैयार किया और बहुत दर्द के बाद मुझे एक समाधान समाधान मिला। ध्यान दें कि यह अंत में एक एचजी धक्का नहीं करता है, क्योंकि मैं धक्का देने से पहले कछुए में परिणामों को देखना चाहता था।

#Protected branches to not close 
develop='develop' 
default='default' 

IFS=$'\n' 

#Get all branches 
allBranches=$(hg branches | sort) 

#Loop over and close old branches 
for item in $allBranches 
do 

#Trim off everything but the branch name 
branch=$(echo $item | sed -r 's/\s*[0-9]+:[0-9a-f]+(\s\(inactive\))?$//') 

if [ $branch != $develop ] && [ $branch != $default ] 
then 

hg update $branch 
hg commit --close-branch -m "Closing old branch" 

fi 

done 

स्क्रिप्ट चलाने के बाद मुझे टीम जो शाखाओं वे सक्रिय रूप से काम कर रहे थे पूछा और छीन उन बंद करता है।