2012-05-08 12 views
8

Mercurial: ¿Cuáles son los pasos necesarios para lograr el cambio de nombre de una sucursal después de que se haya creado y se haya comprometido con (tanto localmente como en el repositorio central).Renombrar una rama comprometida en Mercurial

Por ejemplo, creé una rama llamada Zelda y luego me comprometí y envié a un repositorio central. Ahora quiero cambiar el nombre de la rama a Triforce.

¿Hay una extensión que logra esto? ¿Cuál podría ser el largo camino además de cualquier solución de extensión?

+3

Quizás la respuesta de este thread corresponda: http://stackoverflow.com/questions/4378684/mercurial-can-i-rename-a-branch – birryree

Respuesta

10

La respuesta corta es no.

La respuesta larga es, las ramas Mercurial son nombres asociados a conjuntos de cambios. Si tiene varios conjuntos de cambios asignados a la rama zelda y los regala (es decir, los envía al repositorio central), no hay manera de que pueda cambiar el nombre de esa rama sin volver a crear estos conjuntos de cambios, lo que significa reescribir el historial.

Incluso si se tira de esos conjuntos de cambios tanto en que Repo y en el repositorio central, a continuación, volver a crearlos como pertenecientes a la rama Trifuerza, y empujar la rama “renombrado” de nuevo, todos sus colaboradores va a terminar tener dos copias de los conjuntos de cambios, un conjunto en la rama zelda, otro en la rama triforce.

Así que sí, lo que debe hacer se describe en https://stackoverflow.com/a/7245187/67988. Para citar desde allí, ajustar a sus nombres de rama, es decir, zelda es la rama anterior que se cerrará y triforce es la nueva rama que se creará.

hg update zelda 
hg commit --close-branch -m "mgmt: Close branch zelda" 
hg branch triforce 
hg commit -m "mgmt: Create branch triforce" 
hg push --new-branch 

P.S. Si nadie más sacó del repositorio central todavía, puede intentar eliminar zelda desde allí. O bien, si tiene acceso a todas las PC de los otros desarrolladores (suponiendo que se trata de un entorno controlado), y realmente quiere tomar un camino muy peligroso, puede quitar esta rama de todos los repositorios. Definitivamente esto no se considera una buena práctica, y solo se puede utilizar como medida de último recurso.

+1

Buena respuesta. Pero cerraría 'zelda' antes de abrir' triforce' y así mantener el historial lineal. Creo que se ve más limpio. –

+0

@MartinGeisler: Recuerdo que tuve algunos problemas con las sucursales cerradas de la forma que sugeriste. Por lo que recuerdo, en hgweb, las ramas que estaban cerradas, pero con el conjunto de cambios de cierre con descendientes, se mostraban como inactivas, no cerradas. No sé, tal vez este fue un error que se ha solucionado desde entonces, pero generalmente dejo el conjunto de cambios de cierre solo para estar seguro. – Helgi

+1

En las versiones modernas de Mercurial, una rama * closed * se muestra con un color tenue en hgweb. Una rama * inactiva * no tiene un estilo diferente, al menos no por el estilo predeterminado llamado "papel". Cerrar antes de fusionarse también significa que obtendrá menos encabezados topológicos en su historial. Algunas solicitudes de protocolo envían los hash de todos los encabezados topológicos, por lo que limitar el número de encabezados puede ayudar con el rendimiento. Solía ​​ocurrir que muchos jefes podían hacer que nuestras solicitudes HTTP superaran la longitud máxima permitida por los servidores web comunes, pero ahora enviamos los datos en encabezados HTTP. –

Cuestiones relacionadas