¿Cuál es el punto de las tags en el bazar?

Empecé a usar bazar después de un largo campamento en el campo svn. También tuve experiencia previa con cvs y usé tags de vez en cuando.

Con svn, una vez que libera una versión, realiza una copy svn de su troncal en tags, por ejemplo, svn copy trunk tags / 1.2.0. En bazar creé la misma estructura de repository, pero la ausencia de una opción de copy bzr y la presencia de la label bzr me hicieron reflexionar.

El hecho es que las tags son difíciles de usar o inútiles. Si uso tags, básicamente tengo mi troncal como único directory, y cuando alcanzo un hito, lo etiqueto. Luego sigo desarrollando y labelndo nuevamente cuando se alcanza un nuevo hito. Esto complica las siguientes tareas:

  • comparar una nueva versión con una versión anterior recursivamente (con el enfoque similar a svn: diff –brief -r)
  • solucionando errores una versión anterior, y crea una nueva versión con su parche aumentada (con el enfoque similar a svn: svn copy 2.0.0 2.0.1, luego agrega la corrección a 2.0.1 y compártala)
  • get la versión que desea sin tener que verificarla (si echa un vistazo al tree completo en svn-like, tiene todas las versiones y twigs, y lo hace solo una vez)

Como resultado, utilizo la misma estructura svn repo en bzr, y realizo una copy física del tronco cada vez. Esto significa que no veo ningún uso real del command de label bzr en esta disposition. ¿Por qué debería labelr toda la revisión de repo con un número de versión, si contiene todos ellos para cada revisión?

¿Alguien podría decirme qué estoy haciendo mal al usar y comprender las tags para un repository bzr?


Editar

Por lo que veo, el concepto es tener diferentes twigs bzr (twigs independientes, procedentes del tronco a través de la twig bzr) para cada lanzamiento. Es como svn, solo que no colocas el directory raíz en el repository. Todavía no veo ninguna razón en particular para las tags, aparte del hecho de que, si tiene, digamos foo-1.0.0 foo-1.0.1 foo-2.0.0 foo-2.1.0 trunk

y suponiendo que siempre etiquete lanzamientos antes de la bifurcación, tronco tendrá tags para todos ellos, mientras que foo-2.0.0 tendrá foo-1.0.0 entre sus tags, pero no foo-1.0.1 porque se ramificó de foo-1.0 .0.

Todavía no veo la necesidad de tener y usar tags. Mi label está implícita en el nombre del directory que elijo para esa twig. No estoy realmente interesado en un número de versión particular, solo me interesa que esté en un directory específico.

¿Qué son las tags en bzr?

Las tags son simplemente un mango fácil de recordar para una revisión en particular. En lugar de intentar recordar david@hrcsb.org-20090420170402-eql4vzvcifkz4fwy , o revno 19721 , puede consultar su label:

 bzr export -r tag:foo-1.0.0.0 release-foo-1.0.0.0.tar.gz trunk/ 

¿Cómo puedo gestionar los lanzamientos en bzr?

Parece que estás tratando tus lanzamientos como líneas de desarrollo separadas (también conocidas como: branches), así que te recomendaría labelr tu trunk para que sepa de dónde se ramificó y crear twigs de lanzamiento separadas:

 bzr tag -r 1234 -d trunk/ foo-1.0.0.0 bzr branch -r 1234 trunk/ release-1.x 

Cuando realiza las correcciones de errores para las versiones 1.x, las hace en la twig release-1.x, labelndo cada versión de punto:

 bzr tag -r 1255 -d release-1.x/ foo-1.0.0.1 bzr export -r tag:foo-1.0.0.1 release-foo-1.0.0.1.tar.gz release-1.x/ 

La estructura de su directory puede ser similar a esto:

 fooproj/ release-1.x/ release-2.x/ trunk/ 

Bueno, básicamente, no deberías intentar copyr la estructura de directorys de SVN. No tengo idea de por qué SVN lo tiene de esa manera, pero básicamente las tags son solo un marcador en un punto en el time en tu repository bzr. Cuando quieres diferenciar contra una label, se puede hacer como

 bzr diff -r tag:TAG_NAME 

Por lo tanto, cada vez que esté haciendo un lanzamiento, simplemente marque y esté en su path. Nada especial, como mover algo a una carpeta específica o cualquier cosa.

Te recomiendo que comiences a usar twigs separadas en lugar de tags para las cosas que te gustaría volver, por ejemplo, la línea 2.0.x de tu código, para que tengas una twig para 2.0.x y luego tags como 2.0 .0 y 2.0.1 en él.

Además, consulte http://bazaar-vcs.org/Specs/Tagging

Las tags en svn se parecen más a las twigs svn. Usted ha descrito el flujo de trabajo que se correlacionó bien con las twigs bzr. Tags le permite tener una twig con pointers a sus lanzamientos, para que cualquiera pueda get la versión exactamente lanzada desde el tronco:

bzr branch trunk foo-1.0 -r label: 1.0