tipos - ¿Existe una convención de nomenclatura estándar para las etiquetas git?
¿qué hace git log-oneline? (8)
Hay versión semántica , por Tom Preston-Werner de la fama de Github:
Etiquetado de especificación (SemVerTag)
Esta sub-especificación DEBERÍA ser utilizada si usa un sistema de control de versiones (Git, Mercurial, SVN, etc.) para almacenar su código. El uso de este sistema permite que las herramientas automatizadas inspeccionen su paquete y determinen el cumplimiento de SemVer y las versiones lanzadas.
- Al etiquetar las versiones en un sistema de control de versiones, la etiqueta para una versión DEBE ser "vX.YZ", por ejemplo, "v3.1.0" .
He visto muchos proyectos usando v1.2.3
como la convención de nomenclatura para etiquetas en git. También he visto algunos usos 1.2.3
. ¿Hay un estilo respaldado oficialmente o hay buenos argumentos para usar cualquiera?
La razón de la ''v'' anterior es histórica. Los SCCS antiguos (cvs, rcs) no podían distinguir entre un identificador de etiqueta y un número de revisión. Los identificadores de etiqueta estaban restringidos para que no comenzaran con un valor numérico para poder detectar los números de revisión.
No hay una mejor práctica que yo sepa. Aquí hay algunos enlaces:
- http://web.elctech.com/?p=79
- http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html#production-tagging
En general, el control de versiones ( 0.0.1
, v0.2.1
, ...) tal vez de la mano con algunos problemas de seguimiento podría considerarse un enfoque plausible. (.. aunque usualmente uso los nombres de etiqueta vprefixed ... vea también @VonC answer)
No que yo sepa.
Pero Git no permitirá una etiqueta y una rama del mismo nombre al mismo tiempo, por lo que si tiene una rama " 1.1
" para 1.1
obras, no coloque una etiqueta " 1.1
", use por ejemplo " v1.1
"
No sé de ningún estándar. Simplemente elijo los nombres de mis etiquetas para que pueda
VERSION = `git describe --tags`
en mis scripts de compilación. Entonces, la convención de nomenclatura de etiquetas en realidad depende de la convención de nomenclatura de la versión del proyecto.
Nuevos gestores de paquetes aconsejan etiquetar versiones sin prefijo v
(como composer para proyectos PHP). SemVer 2.0 no tiene nada sobre la especificación de la etiqueta. Se hace intencionalmente debido a evitar conflictos. Sin embargo, se recomienda agregar el prefijo v
en la documentación y las referencias de texto. Como ejemplo de formato v1.0.4
lugar de la version 1.0.4
completa version 1.0.4
o ver. 1.0.4
ver. 1.0.4
es suficientemente prolijo y elegante en la documentación.
Parece que hay dos convenciones dominantes (suponiendo que usted también cumpla con un estándar razonable para numerar las publicaciones):
-
v1.2.3
-
1.2.3
Las ventajas de v1.2.3
son que la documentación de Git (y también la documentación de Mercurial) usa ese formato en sus ejemplos, y que varias "autoridades" como el kernel de Linux , el propio Git y las versiones semánticas mencionadas lo usan.
Las ventajas de 1.2.3
son que gitweb o GitHub pueden ofrecer automáticamente una descarga de tarball o zip del formulario packagename-$tag.tar.gz
(y creo que está bastante establecido que un package-v1.2.3.tar.gz
no debe llamarse package-v1.2.3.tar.gz
). Alternativamente, puede usar git describe
directamente para generar números de versión tarball. Para proyectos livianos sin un proceso de lanzamiento formal, estas posibilidades pueden ser bastante convenientes. También se debe tener en cuenta que la versión semántica no es de ninguna manera la única o una norma universalmente aceptada para la numeración de versiones. Y proyectos notables como GNOME e innumerables otros proyectos usan el nombre de la etiqueta 1.2.3
.
Creo que es demasiado tarde para consolidar estas posiciones. Como siempre, sea consecuente y tenga sentido.
Actualización: como se menciona en this comentario, GitHub ahora ofrece un nombre de tarball con la ''v'' eliminada de la etiqueta.
Usamos ramas y etiquetas para el trabajo específico del lanzamiento seguido del lanzamiento real, respectivamente:
o---o-----o---o---o--- ... master
/ / /
/ / /
o-------o--- ... 1.6 branch
Cada desarrollador toma una decisión mental sobre si el trabajo que están a punto de comprometer es aplicable solo para dominar o si también es relevante para la sucursal. Puede ver que los cambios que se realizan en la rama se fusionan en el maestro, pero algunos cambios en el maestro nunca irán a la sucursal (es decir, los que no están destinados para la versión 1.6, en este ejemplo).
Cuando estemos listos para lanzarlo, lo etiquetamos y luego nos fusionamos por última vez, y nombramos la etiqueta con el mismo nombre que la rama, pero con un identificador adicional sobre la versión particular que es, por ejemplo, "1.6-release". o "1.6-beta" o "1.6-rc2", etcétera.
... ------o---o---o--o---o--- ... master
/ /
/ /
... ---o------(*)--- ... 1.6 branch
1.6-release