2010-12-08 9 views
5

que utilizan TortoiseHg 1.1 y en nuestro equipo que tienden a crear ramas nombradas para cada caso, trabajamos en y luego fusionar con defecto cuando hayamos terminado. Desafortunadamente, la mayoría de las sucursales nombradas no se cierran. Este no es un gran problema, pero es molesto cuando intentas filtrar por la rama en la que estás trabajando actualmente y hay una enorme lista de ramas antiguas para buscar.cerrar varias sucursales en TortoiseHg

Entonces, ¿hay una manera fácil de TortoiseHg o desde la línea de comandos para cerrar varias ramas rápidamente sin tener que comprometer y cerrar manualmente en cada rama?

+2

Si tiene suficientes ramas con nombre como para ser confusas o difíciles de navegar, probablemente esté utilizando ramas con nombre mal. Una de las ideas detrás de un DVCS es que puedes hacer ramas anónimas siempre que lo desees mediante clonación, en la que puedes trabajar de forma independiente y luego subir la cadena una vez que se completa la función, eliminando la ahora inútil rama anónima sin preocupación . – dimo414

Respuesta

7

Desafortunadamente no.

debe cerrar cada rama por separado con su propia comprometerse en esa rama.

La mejor manera de hacerlo es utilizar la línea de comandos, incluso se podría crear un archivo por lotes sencillo para cerrar un montón de ellos:

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 

El flujo de trabajo que utilizo es utilizar la extensión de marcadores para solo guardo marcadores locales para mis líneas de desarrollo, de esta forma utilizo las ramas normales sin nombre en Mercurial, pero todavía puedo distinguirlas fácilmente localmente. Los mensajes de confirmación se utilizan para separarlos más tarde.

De esta manera, no tengo un montón de ramas con nombres que llenan mi historial, no tengo que acordarme de cerrarlas, y solo tengo que hacer un seguimiento de las ramas que uso localmente.

+0

+1 Se perdió la última parte al cerrar automáticamente la rama.Siempre he profesado usar ramas solo para líneas de desarrollo que durarán mucho tiempo. – pyfunc

2

Véanse los siguientes todas las opciones posibles:

de los cuales la opción rama de cierre se puede utilizar.

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

Además, mi entendimiento ha sido que es preferible para clonar para la mayoría del trabajo y el uso de ramas nombradas sólo para unos posibles trenes de larga vida de desarrollo.

+0

Sí, usaría marcadores locales para mi propio trabajo y solo nombraría sucursales para funciones más grandes, no para la corrección de errores cotidiana normal. –

1

Aquí es un script de PowerShell que se cerrarán todas las ramas activas, excepto el valor predeterminado. Agregue su propia lógica de filtrado para excluir las ramas que no desea cerrar.

$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

¿No podría esto cerrar sucursales que tenían un espacio en el nombre? He estado tratando de hacer esto en bash y me estoy quedando atascado en la salida de las ramas de hg. Cada elemento está realmente en el formulario . La documentación de hg dice algo acerca de un argumento de línea de comando experimental experimental, pero mi versión de mercurial no parece apoyarlo ... – CodeOtaku

0

Bueno por lo que esta es la forma en tarde, pero se dispuso a hacerlo a través de bash y después de una gran cantidad de dolor que consiguió una solución de trabajo. Tenga en cuenta que esto no hace un empuje de hg al final, porque quería ver los resultados en tortuga antes de empujar.

#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 

Después de ejecutar la secuencia de comandos que pidió al equipo que se ramifica estaban trabajando activamente en los despojados y el cierre se compromete.