Existe-t-il une convention de dénomination standard pour les balises git? [fermé]

229

J'ai vu beaucoup de projets utiliser v1.2.3comme convention de dénomination pour les balises dans git. J'ai également vu une utilisation 1.2.3. Existe-t-il un style officiellement approuvé ou existe-t-il de bons arguments pour utiliser l'un ou l'autre?

troelskn
la source
19
Avec 43 votes positifs et comptage, je me demande si cette question très précieuse pourrait être reformulée et rouverte, avec une réponse intégrant tous les points dans un joli résumé et étant au sommet? @ PeterEisentraut semble être le plus complet; alors que la réponse acceptée ATM semble un peu trompeuse. (Je pense que j'utiliserai la v1.2.3 pour les balises moi-même, après avoir lu tous les points.)
HostileFork dit de ne pas faire confiance au SE
1
SO sert à fixer le code. Les meilleures pratiques semblent appartenir à softwareengineering.stackexchange.com ou codereview.stackexchange.com
Cees Timmerman
Jetez un œil à semver.org (versioning sémantique), qui devrait vous donner quelques idées.
vonbrand
mon expérience me dit d'utiliser un schéma légèrement différent. 1. sous-répertoire: une balise Git doit au moins commencer par v/cette balise de groupe dans un espace de noms. 2. idéalement, une balise devrait également contenir un acronyme qui identifie de manière unique l'application. par exemple v/myapp/1.0. Cela facilite la fusion du référentiel git: dans le cas où les applications seraient fusionnées, les balises ne se heurteront pas dans l'espace de noms des balises.
axd

Réponses:

166

La version 1.0.0 de Semantic Versioning , par Tom Preston-Werner de GitHub fame, avait une sous-spécification traitant ceci:

Spécifications 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 à des outils automatisés d'inspecter votre package et de déterminer la conformité SemVer et les versions publiées.

  1. Lors du balisage de versions dans un système de contrôle de version, la balise d'une version DOIT être "vX.YZ", 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). Un fil de discussion ultérieur au même endroit est allé plus en profondeur et a abouti à une nouvelle version «v1.2.3» est-elle une version sémantique? étant ajouté à la FAQ dans la masterbranche de SemVer , bien qu'au moment de la rédaction (plus de 2 ans plus tard) ce changement ne soit toujours pas présent dans les spécifications officiellement publiées.

péritus
la source
9
Merci - C'est très proche. Je souhaite qu'il aurait qualifié pourquoi le vdevrait être là cependant.
troelskn
3
@troelskn @mojombo == Tom Preston-Werner
peritus
4
Lien mis à jour: github.com/mojombo/semver.org/issues/1
Josh Lee
41
Semantic Versioning 1.0.0 utilise le format "v1.2.3". La version sémantique 2.0.0-rc.1 utilise probablement le format "1.2.3". L'article sur les spécifications de marquage (SemVerTag) a été supprimé des spécifications. Plus ici: semver.org
petrnohejl
9
Cette réponse se fait quand existait l'ancien semver (version 1.0). De nos jours, le préfixe «v» a été supprimé de semver v2.0. Pour plus de détails, voir l'article ci-dessous.
vitalii
111

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 v1.2.3sont que la documentation Git (ainsi que la documentation Mercurial) utilise ce format dans ses exemples, et que plusieurs "autorités" telles que le noyau Linux et Git lui-même l'utilisent. (Le versionnage sémantique mentionné l'a utilisé mais ne l'est plus.)

Les avantages de 1.2.3sont que gitweb ou GitHub peut automatiquement proposer un tarball ou un téléchargement zip du formulaire packagename-$tag.tar.gz(et je pense qu'il est tout à fait établi qu'une tarball ne doit pas être nommée package-v1.2.3.tar.gz). Alternativement, vous pouvez utiliser git describedirectement pour générer des numéros de version tarball. Pour les projets légers sans processus de publication officiel, ces possibilités peuvent être très pratiques. Il convient également de noter que la version sémantique n'est en aucun cas la seule norme universellement acceptée pour la numérotation des versions. Et des projets notables tels que GNOME ainsi que d'innombrables autres projets utilisent la 1.2.3dénomination des balises.

Je pense qu'il est probablement trop tard pour consolider ces positions. Comme toujours, soyez cohérent et logique.


Mise à jour: Comme mentionné dans ce commentaire, GitHub propose désormais un nom tarball avec le «v» retiré de la balise.

Peter Eisentraut
la source
13
Concernant GitHub et la génération tarball: ce n'est plus pertinent. Ils retirent le «v» de la balise.
Hermann Bier du
6
Le préfixe «v» est également très utile lors du tri des balises par ordre alphabétique. D'autres balises peuvent également exister; que ce soit officiellement dans un référentiel maître ou pour suivre le travail d'un développeur localement. Avec les préfixes «v», les balises de publication forment leur propre groupe, au lieu d'être dispersées dans le reste de l'espace de noms.
Robie Basak
1
Mise à jour de la réponse pour refléter que SemVer n'utilise plus v.
Adam Spires
80

La raison du «v» précédent est historique. Les anciens SCCS (cvs, rcs) ne pouvaient pas faire la distinction entre un identifiant de balise 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.

Bill Door
la source
5
+1: Bonne première réponse et un nom de l'un de mes livres préférés :-) Peut-être que votre prochaine réponse sera sur une question plus actuelle.
Johnsyweb
1
... mais si cela n'est vrai que pour les SVCS plus anciens , que faire si le point de cette réponse à une question sur Git moderne?
MestreLion
3
ceci est toujours utile dans git, vous pouvez donc facilement distinguer les balises de version des autres types de balises (les balises sont utiles pour beaucoup d'autres choses)
Benja
19

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 les 1.1travaux, ne mettez pas de balise " 1.1", utilisez par exemple " v1.1"

VonC
la source
8
Utilisation pour les branches 1.1.x. C'est tout.
vitalii
1
belle prise, merci.
RY
10

Nouveaux conseils de gestionnaires de paquets pour baliser les versions sans préfixe v(comme le compositeur pour les projets PHP). SemVer 2.0 n'a rien sur la spécification des balises. C'est fait intentionnellement en évitant les conflits. Cependant, il est conseillé d'ajouter un préfixe vdans la documentation et les références textuelles. Comme exemple de format v1.0.4au lieu de plein version 1.0.4ou ver. 1.0.4est assez bavard et élégant dans la documentation.

vitalii
la source
22
«Il est conseillé de…» Conseillé par qui, et où peut-on voir ce conseil dans son contexte d'origine?
bignose
8

Nous utilisons des branches et des balises pour le travail spécifique à la version suivie de la version réelle, respectivement:

o---o-----o---o---o--- ...   master
     \   /       /
      \ /       /
       o-------o--- ...      1.6 branch

Chaque développeur décide mentalement si le travail qu'il est sur le point de valider s'applique uniquement à la maîtrise 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 apporté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 à publier, nous l'étiquetons puis fusionnons une dernière fois, et nous nommons la balise avec le même nom que la branche, mais avec un identifiant supplémentaire sur la 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
John Feminella
la source
Merci - c'est une bonne réponse pour décrire comment vous effectuez des branchements, mais je voulais juste dire s'il y avait une raison (technique) spécifique d'utiliser un certain schéma de nommage dans git. Je vous donne toujours une note positive pour les beaux diagrammes;)
troelskn
Ah, gotcha! Désolé d'avoir mal compris votre question. Non, il n'y a pas de raison technique spécifique pour utiliser un nom particulier, autre que la communication humaine. Vous pouvez nommer vos branches et tags à peu près comme vous le souhaitez.
John Feminella
Votre branche release-1.6 est nommée "branche 1.6"? Je pensais que les espaces n'étaient pas pris en charge dans les noms de branche.
Cees Timmerman
8

Je ne connais aucune norme. Je choisis simplement les noms de mes balises pour pouvoir coller un

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 des versions du projet.

Jörg W Mittag
la source
1
git describe --tags:>
Damien Carol
1

Il n'y a pas une meilleure pratique , je suis au courant. Voici quelques liens:

En général, le versioning ( 0.0.1, v0.2.1, ...) peut - être la main dans la main avec une question de suivi pourrait être considéré comme une approche plausible. (.. bien que j'utilise habituellement des vnoms de balises préfixées .. voir aussi la réponse @VonC)

miku
la source