2010-12-08 97 views
5

我使用TortoiseHg 1.1,在我們的團隊中,我們傾向於爲每個我們工作的案例創建命名分支,然後在完成時合併默認分支。不幸的是,大多數命名分支沒有關閉。這不是一個大問題,但當您嘗試按當前正在處理的分支進行篩選並且存在大量要搜索的舊分支時,這很煩人。關閉TortoiseHg中的多個分支

因此,在TortoiseHg中或從命令行快速關閉多個分支,而不必在每個分支上手動提交和關閉,有沒有簡單的方法?

+2

如果你有足夠的命名分支來混淆或難以瀏覽,你很可能使用命名分支很差。 DVCS背後的一個想法是,只要你想簡單地克隆,你就可以創建匿名分支,你可以獨立工作,然後在功能完成後推回鏈,無需擔心刪除現在無用的匿名分支。 – dimo414 2010-12-08 10:35:08

回答

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 

我使用的工作流程是使用書籤擴展爲我的開發線保留本地書籤,這樣我就可以在Mercurial中使用普通的未命名分支,但仍然可以在本地輕鬆區分它們。提交消息用於稍後分離它們。

這樣,我沒有一堆命名分支凌亂我的歷史,我不必記得關閉它們,我只需要跟蹤我在本地使用的分支。

+0

+1錯過了自動關閉分支的最後部分。我一直自稱只使用分支來開發長期存在的開發線。 – pyfunc 2010-12-08 10:12:02

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

是的,我會將本地書籤用於自己的工作,並且只爲更大的功能命名分支,而不是用於正常的日常修復。 – 2010-12-08 10:12:37

1

這是一個PowerShell腳本,它將關閉除默認設置外的所有活動分支。 添加您自己的過濾邏輯以排除您不想關閉的分支。

$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

這不會無法關閉名稱中有空格的分支嗎?我一直試圖在bash中做到這一點,我陷入了hg分支的輸出。每個項目實際上都是<可選'非活動'標籤>。 hg文檔中提到了一些關於實驗模板命令行參數的內容,但是我的mercurial版本似乎不支持它... – CodeOtaku 2017-06-05 19:35:33

0

好吧,所以這是晚了,但我開始通過bash做這個,經過很多痛苦,我得到了一個工作解決方案。請注意,這最終不會進行hg推動,因爲我想在推動之前查看烏龜的結果。

#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 

運行該腳本後,我問哪個分支,他們積極工作的團隊和剝離那些封閉提交。