关闭TortoiseHg中的多个分支

关闭TortoiseHg中的多个分支

问题描述:

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

因此,在TortoiseHg中或从命令行快速关闭多个分支,而不必在每个分支上手动提交和关闭,有没有简单的方法?

+2

如果你有足够的命名分支来混淆或难以浏览,你很可能使用命名分支很差。 DVCS背后的一个想法是,只要你想简单地克隆,你就可以创建匿名分支,你可以独立工作,然后在功能完成后推回链,无需担心删除现在无用的匿名分支。 – dimo414 2010-12-08 10:35:08

不幸的是没有。

您需要分别关闭每个分支,并在该分支上进行自己的提交。

要做到这一点,最好的办法是使用命令行,你甚至可以创建一个简单的批处理文件来关闭一群人:

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

查看所有可能的选项如下:其中

收盘分支选项可以使用。

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

这是一个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

好吧,所以这是晚了,但我开始通过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 

运行该脚本后,我问哪个分支,他们积极工作的团队和剥离那些封闭提交。