2010-11-30 13 views
8

He leído este documento: A Guide to Branching with Mercurial, específicamente la sección titulada Branching with Bookmarks.Mercurial, "ramificación con marcadores"

Dice:

Ahora usted tiene dos marcadores (esencialmente una etiqueta) para sus dos ramas en el conjunto de cambios actual.

Para cambiar a una de estas ramas puede usar hg update feature para actualizar al conjunto de cambios de sugerencia de esa rama y marcarse a sí mismo como que trabaja en esa rama. Cuando se compromete, moverá el marcador al conjunto de cambios recién creado.

Intenté esto, pero terminó moviendo ambos marcadores al mismo tiempo.

¿Esa guía está equivocada, desactualizada o hice algo mal? Tenga en cuenta que sé que tener marcadores en ramas separadas solo mueve el marcador relacionado con la rama en la que estoy trabajando actualmente, pero esa guía (que mucha gente dice que es la guía definitiva para esto) dice específicamente el texto anterior, que indica que debería haber funcionado "contándole" a Mercurial qué marcador (rama) estoy trabajando.

Las pruebas muestran lo contrario.

¿Alguna idea?

Ejemplo:

 
> hg init 
> echo 1 >test.txt 
> hg commit -m "initial" --addremove 
adding test.txt 

> hg bookmark main 
> hg bookmark feature 
> hg log 
changeset: 0:c56ceb49ee20 
tag:   feature 
tag:   main 
tag:   tip 
user:  Lasse V. Karlsen <[email protected]> 
date:  Tue Nov 30 23:06:16 2010 +0100 
summary:  initial 

> hg update feature 
0 files updated, 0 files merged, 0 files removed, 0 files unresolved 

> echo 2 >test2.txt 
> hg commit -m "feature 1" --addremove 
adding test2.txt 

> hg log 
changeset: 1:9f2f5869b57b 
tag:   feature        <---- both were moved 
tag:   main        <---- 
tag:   tip 
user:  Lasse V. Karlsen <[email protected]> 
date:  Tue Nov 30 23:06:45 2010 +0100 
summary:  feature 1 

changeset: 0:c56ceb49ee20 
user:  Lasse V. Karlsen <[email protected]> 
date:  Tue Nov 30 23:06:16 2010 +0100 
summary:  initial

Respuesta

16

Si te tengo derecho, desea sólo el marcador que hayas informado se mueva en la próxima confirmación. Para este propósito, las extensiones de marcadores tienen la opción track.current.

De BookmarksExtension:

Por defecto, cuando varios marcadores apuntan al mismo conjunto de cambios, todos ellos avanzar juntos. Es posible obtener una experiencia más similar a Git al agregar la siguiente opción de configuración a su.hgrc

[bookmarks] 
track.current = True 

En su ejemplo, esto sería mantener el principal marcador en la revisión 0.

Si la opción track.current está activado, el marcador activo en ese momento se anota con un asterisco en la salida de hg bookmarks.

ACTUALIZACIÓN: Desde Mercurial 1.8 el comportamiento por defecto es solamente mover el marcador actual, es decir, la opción mencionada anteriormente no se necesita más [1].

+0

Quizás ese fue el comportamiento predeterminado en algún momento, ¿y se modificó? De todos modos, tienes razón, con esa configuración se comporta exactamente como la guía retrata. ¡Gracias! –

+0

No, la opción 'track.current' siempre ha predeterminado a False. Recientemente se ha debatido acerca de cómo hacer que el comando de marcador sea un comando central y, en relación con eso, se sugirió que 'track.current' comience a funcionar como True. –

+3

+1 para la respuesta útil, pero lleva a una pregunta obvia: ¿cuándo es track.current * not * appropriate? No puedo imaginar una situación en la que tengo varios marcadores y quiero que * todos * avancen en una confirmación. –

3

Si usted lee la descripción de la BookmarksExtension, que dice:

Los marcadores son referencias a confirmaciones que se actualizan automáticamente cuando se realizan nuevas confirmaciones.

y:

Desde marcadores se actualizan automáticamente cuando commiting al conjunto de cambios que están apuntando a, que son especialmente útiles para realizar un seguimiento de las diferentes cabezas.

En su caso, solo tenía un encabezado en el repositorio en el momento en que creó ambos marcadores. Si utiliza una secuencia como la siguiente, que debería funcionar como se espera:

hg init foo 
# edit, edit, edit 
hg commit -A -m "root" 
hg bookmark main 
# edit, edit, edit ... 
hg commit -m "main 1" 
hg update 0 
# edit, edit edit 
hg bookmark feature 
hg commit -m "feature 1" 
+1

Entonces, básicamente, ¿está diciendo que la guía es incorrecta? Esa es mi pregunta después de todo. Sé que los marcadores individuales, como su ejemplo, funcionan como se esperaba. Pero esa guía parece decir que si ejecuta 'hg update feature', solo ese marcador se avanzará. –

+0

@Lasse: no, creo que el documento omite algunos detalles de brevedad; el autor _desea_ decir que lea más acerca de los marcadores antes de usarlos. –

+1

Supongo que el autor de la guía (en silencio) supuso que la opción * track.current * de la extensión de marcadores está habilitada (ver mi respuesta relacionada). –

Cuestiones relacionadas