J'ai vu beaucoup de projets utilisant v1.2.3
comme convention de dénomination pour les balises dans git. J'ai aussi vu des utilisations 1.2.3
. Existe-t-il un style officiellement approuvé ou existe-t-il de bons arguments pour utiliser l'un ou l'autre?
La version 1.0.0 de Semantic Versioning , de Tom Preston-Werner de GitHub, avait ne sous-spécification adressant ceci:
Spécification de marquage (SemVerTag)
Cette sous-spécification DEVRAIT être utilisée si vous utilisez un système de contrôle de version (Git, Mercurial, SVN, etc.) pour stocker votre code. L'utilisation de ce système permet aux outils automatisés d'inspecter votre package et de déterminer la conformité SemVer et les versions publiées.
- Lors du marquage des versions dans un système de contrôle de version, la balise d'une version DOIT être "vX.Y.Z", par exemple. "v3.1.0" .
Cependant, après discussion , cela a été supprimé et n'est plus présent dans la dernière version de la spécification SemVer (2.0.0 au moment de la rédaction). n fil de discussion plus tard au même endroit est allé plus en profondeur, et a abouti à un nouveau Est-ce que "v1.2.3" est une version sémantique? Being ajouté = à FAQ dans la branche master
de SemVer, bien que, au moment de la rédaction (plus de 2 ans plus tard), ce changement soit toujours pas présent dans le spec officiellement publié.
Il semble y avoir deux conventions dominantes (en supposant que vous respectiez également une norme raisonnable pour numéroter les versions elles-mêmes):
v1.2.3
1.2.3
Les avantages de v1.2.3
sont que la documentation de Git (ainsi que la documentation de Mercurial) utilise ce format dans ses exemples, et que plusieurs "autorités" telles que noyau Linux et Git utilisent elles-mêmes il. (Le ) versionant sémantique utilisait mais n'en utilisait plus.
Les avantages de 1.2.3
sont que gitweb ou GitHub peuvent automatiquement proposer un téléchargement tarball ou Zip du formulaire packagename-$tag.tar.gz
(et je pense qu’il est tout à fait établi qu’une archive tar devrait ne pas être nommée package-v1.2.3.tar.gz
). Alternativement, vous pouvez utiliser git describe
directement pour générer les numéros de version de tarball. Pour les projets légers sans processus de libération formel, ces possibilités peuvent s'avérer très pratiques. Il convient également de noter que le versionnage sémantique n’est en aucun cas la norme unique ou universellement acceptée pour la numérotation des versions. Et des projets notables tels que GNOME ainsi que d'innombrables autres projets utilisent le 1.2.3
nom de balise.
Je pense qu'il est probablement trop tard pour consolider ces positions. Comme toujours, soyez cohérent et logique.
Mise à jour: Comme mentionné dans le commentaire this , GitHub propose désormais un nom d'archive avec le 'v' dépouillé du tag.
La raison du 'v' précédent est historique. Les SCCS plus anciens (cvs, rcs) n’étaient pas en mesure de faire la distinction entre un identificateur d’étiquette et un numéro de révision. Les identificateurs de balises ont été restreints pour ne pas commencer par une valeur numérique afin que les numéros de révision puissent être détectés.
Pas que je sache de.
Mais Git n'autorisera pas une balise et une branche du même nom en même temps, donc si vous avez une branche "1.1
" pour 1.1
fonctionne, ne mettez pas de balise "1.1
", utilisez par exemple" v1.1
"
Les nouveaux gestionnaires de paquets conseillent de taguer les versions sans le préfixe v
(comme composer pour PHP projets). SemVer 2. n'a rien sur la spécification de balise, c'est fait intentionnellement pour éviter les conflits. Cependant, il est conseillé pour ajouter le préfixe v
dans la documentation et les références textuelles, le format d'exemple v1.0.4
au lieu de version 1.0.4
ou ver. 1.0.4
est suffisant dans la documentation.
Nous utilisons des branches et des balises pour le travail spécifique à la publication suivi de la version réelle, respectivement:
o---o-----o---o---o--- ... master
\ / /
\ / /
o-------o--- ... 1.6 branch
Chaque développeur prend une décision mentale quant à savoir si le travail qu'il est sur le point de commettre est applicable uniquement à maîtriser ou s'il est également pertinent pour la branche. Vous pouvez voir que les modifications apportées à la branche sont fusionnées sur le maître, mais certaines modifications sur le maître ne seront jamais appliquées à la branche (c'est-à-dire celles qui ne sont pas destinées à la version 1.6, dans cet exemple).
Lorsque nous sommes prêts à le publier, nous le taguons, puis nous le fusionnons une dernière fois et nous nommons le tag avec le même nom que la branche, mais avec un identifiant supplémentaire indiquant sa version particulière, par exemple. "1.6-release" ou "1.6-beta" ou "1.6-rc2", et cetera.
... ------o---o---o--o---o--- ... master
/ /
/ /
... ---o------(*)--- ... 1.6 branch
1.6-release
Je ne connais aucune norme. Je choisis simplement mes noms de balises de manière à pouvoir coller
VERSION = `git describe --tags`
dans mes scripts de construction. Ainsi, la convention de dénomination des balises dépend en fait de la convention de dénomination de version du projet.
Il n'y a pas une meilleure pratique à ma connaissance. Voici quelques liens:
Généralement, la gestion des versions (0.0.1
, v0.2.1
, ...) peut-être qu'un suivi des problèmes pourrait être considéré comme une approche plausible. (.. bien que j'utilise habituellement les noms de balises avec préfixe v
- .. voir aussi la réponse @VonC)