mercurial tags bookmarks

mercurial - ¿Cuál es la diferencia entre hg tag y hg bookmark?



tags bookmarks (4)

En realidad, hay cinco conceptos para jugar:

  • etiquetas
  • etiquetas locales
  • marcadores
  • ramas livianas
  • ramas nombradas

Las ramas livianas son lo que sucede si solo usas mercurial. La historia de tu repositorio se bifurca y, a veces, se fusiona a medida que cambias las cosas y te desplazas por tu historial.

Las otras cuatro son formas de anotar ramas ligeras y los conjuntos de cambios que las componen.

las ramas y las etiquetas nombradas son conceptos exclusivos de Mercurial donde los nombres y las etiquetas de las sucursales se registran realmente en el repositorio haciendo más commits al repositorio. Tienden a propagarse a otros repositorios de formas que no son necesariamente obvias.

las etiquetas locales y los marcadores se parecen mucho más a lo que git llama etiquetas y ramas. Son metadatos en lugar de mezclarse con los objetos versionados. Entonces no están representados como parte del historial del repositorio. Tienden a ser locales para su repositorio, y no se propagarán a menos que los propague deliberadamente.

Al menos creo que así es como todos funcionan. Después de aproximadamente doce meses de usar mercurial a diario, realmente no me he acostumbrado a su (s) modelo (s). Si alguien sabe mejor que yo, no dude en editar esta respuesta para que sea correcta.

Cómo uso estas cosas en la práctica.

Estoy trabajando en un único depósito compartido con otras 20 personas. Realizo muchos experimentos y ramas ligeras en mi propio repositorio privado, que nunca se envían a nuestro repositorio central principal. Ocasionalmente, una vez que un experimento ha funcionado, modificaré la línea principal y colocaré un conjunto de cambios en el repositorio central, desde el cual llegará a la máquina de todos los demás.

Ocasionalmente enviaré algunos conjuntos de cambios a un compañero de trabajo si es una de las personas que está cómoda con el funcionamiento de mercurial. Pero muchas personas le tienen un poco de miedo y prefieren que les envíe diffs para que puedan aplicar con parche.

Para los experimentos que espero sean de corta duración y privados, solo dejo que las ramas livianas sucedan donde puedan, y recuerdo lo que está pasando. Si siento que mi memoria se desliza sobre una ramita que ha existido por un tiempo, la marque como favorita.

Utilizo etiquetas locales para marcar revisiones que me gustaría volver algún día. Hacen que los estados pasados ​​interesantes sean más fáciles de encontrar.

Yo casi nunca hago etiquetas no locales o ramas con nombre (excepto por accidente, y las destruyo si lo hago). Pero nuestra gente de liberación lo hace. Todas las versiones principales lanzadas tienen sus propias ramas nombradas fuera de la línea principal, y las versiones menores tienen etiquetas en esas ramas. Eso asegura que estas ramas y etiquetas importantes tengan el mismo aspecto para todos.

Una vez más, no tengo idea de si así es como se supone que debemos usar mercurial, pero parece ser un modelo que funciona bien para nuestro tamaño de equipo.

Si tres o cuatro de nosotros quisiéramos colaborar en un experimento, probablemente valga la pena una sucursal con nombre, que probablemente compartiremos entre nosotros pero no empujemos al repositorio central. ¡No sé qué tan bien funcionaría eso!

¿Cuál es la diferencia entre una tag y un bookmark en Mercurial? Parece que no encuentro ninguna discusión sobre cómo los dos difieren.


La mayor diferencia es que un marcador se mueve automáticamente hacia adelante cuando se compromete. Aquí hay un ejemplo:

hg init ..edit a file.. hg commit -m ''my commit'' # creates revision 0 hg tag -r 0 mytag # creates revision 1 hg bookmark -r 0 mybookmark # doesn''t create a revision hg update 0 # get back to r0 ..edit a file.. hg commit -m ''another commit'' # creates revision 2

En ese momento mytag aún apunta a la revisión 0 y mybookmark ahora apunta a la revisión 2. Además, el etiquetado creó un conjunto de cambios y el marcador no.

Además, por supuesto, el marcador creó una revisión


Los marcadores se usan cuando se quiere una mnemotécnica (foo_feature) que apunta a una identificación de commit cambiante a medida que avanza su trabajo. Son más livianas que las ramas regulares de Mercurial, y algo similares a la forma en que funcionan las ramas de git.

Las etiquetas generalmente apuntan a identificadores de commit fijos. Se pueden reasignar manualmente, pero esto se desaconseja.


Consideremos su repositorio como " elija sus propios libros de aventuras ", con diferentes puntos de vista.

  • Una etiqueta es como un sello que el editor colocó en su manuscrito para decir "ok, mantenemos un rastro de su trabajo actual, en caso de que suceda".
  • Una rama nombrada sería un capítulo. Tienes que elegir en un punto qué capítulo tendrás que escribir, y están allí para quedarse. Algunos volverán a fusionarse, otros terminarán (lo siento, murieron).
  • Un marcador es, bueno, un marcador. Te sigue mientras lees (comprometes) el libro. Te ayuda a mantener registros de "lo que estabas leyendo en ese momento", para que puedas eliminarlos, moverlos a un "capítulo" diferente. Cuando compartes el libro (push), generalmente no compartes tus marcadores, a menos que explícitamente quieras hacerlo. Usualmente los usas en ramas anónimas porque su ciclo de vida es más corto que las ramas nombradas.