2011-01-20 27 views
6

Solo estoy jugando con Mercurial por el momento y esto puede no ser un problema, pero acabo de crear un repositorio y agregué algunos cambios. Lo etiqueté en un punto y luego creé una rama con nombre en otro. Tanto la etiqueta como la rama tienen el mismo nombre. Si lo hago hg update name, cambia a la versión etiquetada. ¿Hay alguna manera de cambiar a la rama que no sea mediante el uso de un número de revisión en la rama?Mercurial: ¿Cómo cambiar a una rama con nombre si una etiqueta tiene el mismo nombre?

Creo que lo que me hizo pensar sobre esto fue que si tuviéramos que escribir algunas secuencias de comandos para construir automáticamente una revisión en particular, nos gustaría simplemente especificar una etiqueta o una rama para construir. Si alguien usara el mismo nombre en una etiqueta y una rama, nos toparíamos con problemas con la secuencia de comandos para obtener las revisiones correctas. Es la única solución a esto para asegurarse de que sean únicos, p. por rama pendiente o etiqueta al nombre?

+0

+1 para el pensamiento progresivo. Exactamente lo que estás describiendo me pasó a mí: creé una etiqueta cuando quería decir branch, luego eliminé la etiqueta, luego mi script build/deploy (que toma branch como argumento) comenzó a hacer lo incorrecto. – harpo

Respuesta

3

Obtiene la revisión de la rama de la derivación mediante el análisis de la salida hg branches.

considerar esta situación (una rama y una etiqueta, ambos llamados popular):

$ hg tags 
tip       3:afb4026bfe32 
popular      1:cea974d8cfc4 
$ hg branches 
default      3:afb4026bfe32 
popular      2:aa7ede2bb3f6 

En conchas de bash similar, se obtiene la revisión de punta de ramapopular con:

$ hg branches | grep popular | awk -F ':' '{print $2}' 

Obteniendo la etiqueta la revisión funciona de manera similar, usando hg tags.

Ahora su secuencia de comandos puede actualizar a la rama/etiqueta en cuestión.

+0

Gracias, creo que esto funcionará (solo tuve que agregar -w a grep para una coincidencia exacta). – DaveJohnston

+1

En lugar de la línea de fiesta, también se puede utilizar: 'hg log $ -b -l populares --template 1 '{nodo | cortas} \ n'' :-) –

+0

@ChristopheMuller, me parece que esa no siempre funciona Tienes que tener esa rama en la historia de tu revisión actual. Mientras que esta respuesta funciona en cualquier caso (aunque utilizo 'cut -d ':' -f2' en lugar de' awk' :) – harpo

2

Creo que podría hacerlo con:

hg update -r "limit(heads(branch(name)),1)" 

que utiliza la característica de revsets (ver hg help revsets en un nuevo Mercurial).

Pero si fuera yo, simplemente eliminaría la etiqueta después de golpear a la persona que la creó sobre la cabeza y el cuello.

+0

Parece que no funciona. Se actualiza a la punta (que está en la rama predeterminada). Si actualizo a otra rama donde no hay conflicto, funciona. – DaveJohnston

Cuestiones relacionadas