在TortoiseHg关闭多个分支

时间:2010-12-08 10:05:29

标签: mercurial tortoisehg

我使用TortoiseHg 1.1,在我们的团队中,我们倾向于为我们处理的每个案例创建命名分支,然后在完成后合并默认值。不幸的是,大多数命名分支都没有关闭。这不是一个大问题,但当您尝试按当前正在处理的分支进行过滤并且有大量旧分支要搜索时,这很烦人。

在TortoiseHg或命令行中有一种简单的方法可以快速关闭多个分支而无需在每个分支上手动提交和关闭吗?

4 个答案:

答案 0 :(得分: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中使用普通的未命名分支,但仍然可以轻松地在本地区分它们。提交消息用于稍后将它们分开。

这样我就没有一堆命名分支混乱我的历史,我不必记得关闭它们,我只需要跟踪我在本地使用的分支。

答案 1 :(得分: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

此外,我的理解是,对于大多数工作而言,最好是克隆,并且仅使用命名分支来进行少数可能的长期开发。

答案 2 :(得分: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

答案 3 :(得分: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

运行脚本后,我向团队询问了他们正在积极处理的分支,并剥离了这些封闭提交。