J'utilise git depuis environ un an et j'aimerais utiliser le balisage pour marquer les commits dans différentes versions. J'ai trouvé beaucoup d'informations sur les commandes à utiliser pour travailler avec les balises, mais ce que j'aimerais savoir, c'est pourquoi utiliser le balisage si je peux simplement créer une nouvelle branche appelée 1.1.0
et ne pas avoir à obscurcir mon esprit avec un tout nouvel ensemble de commandes git?
Il doit y avoir beaucoup de bonnes raisons de baliser plutôt que de créer des branches, mais j'aimerais savoir quels sont ces avantages.
Une balise est immuable .
Alors que vous pouvez créer une branche nommée "1.0.0" - vous, ou toute personne ayant des droits de validation, pouvez également simplement pousser vers cette branche (délibérément ou non) et changer ce que signifie 1.0.0.
Vous ne pouvez pas faire cela avec une balise, une fois que vous créez une balise - c'est tout; La balise 1.0.0 signifie exactement cela et ne peut pas être modifiée * .
C'est la principale différence pratique entre une étiquette et une branche
* Vous pouvez supprimer et recréer une balise modifiant ainsi une balise, mais certainement pas par accident.
la source
J'ai tendance à utiliser un flux de travail qui intègre à la fois des balises et des branches. Les balises sont utiles pour marquer le code publié ou les versions de développement notables. Les branches sont utiles pour garder une trace de toutes les modifications pertinentes pour une version spécifique.
Voici un bon article sur ce type de flux de travail: http://nvie.com/posts/a-successful-git-branching-model/
la source
La branche et le tag sont la même chose (pointeur vers un commit, aka. "Ref" ), sauf que la branche se déplace automatiquement vers le prochain commit tandis que le tag reste pour toujours 1 sur le même commit.
Lors de la création d'une version, vous voulez généralement marquer le "snapshot" du code à partir duquel cette version a été construite, et vous voulez qu'elle reste marquée de cette façon même si vous continuez à faire évoluer le code, vous utiliseriez donc une balise.
Si vous avez essayé d'utiliser une branche pour cela, elle pourrait passer par inadvertance à un autre commit, à partir duquel la version n'a pas été construite.
1 Sauf si vous supprimez le tag, bien sûr.
REMARQUE: Je me rends compte que c'est une vieille question, mais j'ai senti que la similitude (et une différence cruciale) entre les branches et les balises n'a pas été étoffée dans d'autres réponses aussi clairement qu'elle aurait pu l'être.
la source
git commit
met à jour la tête de la branche extraite pour référencer le nouveau commit, oui, mais aucune autre branche ne se déplace «automatiquement» vers le prochain commit. Vous devriez clarifier le premier paragraphe de votre réponse..git\refs\heads
, contenant le hachage du commit. Les commits eux-mêmes ne "se souviennent" pas de la branche qui les a créés. Ceci est différent de Mercurial, par exemple, où les informations de la branche peuvent être écrites dans les métadonnées du commit.Vous utilisez des balises pour noter les commits importants dans l'historique. "C'était le commit exact que nous avons utilisé pour cette version ce jeudi pluvieux quand le serveur de build est tombé en panne". Si vous utilisez une branche au lieu d'une balise, vous ne pouvez jamais savoir quel commit exact vous avez utilisé. Vous ne savez que "Nous avons publié la version 1.1.0 quelque part sur cette branche", à moins que vous n'écriviez manuellement le hachage exact pour ce commit, c'est pourquoi vous utilisez des balises en premier lieu :)
la source
En plus des autres réponses, voici mes 2 cents.
Réponse courte: utiliser des balises pour les versions de publication
Réponse longue: Je pense que l'utilisation de balises pour la gestion des versions de version est spécifiquement meilleure que l'utilisation de branches. Si vous avez besoin de mettre à jour la relase, branchez simplement le commit balisé et une fois que vous avez fini de travailler sur cette branche (probablement une branche de correctif), créez une nouvelle balise en tête de cette nouvelle branche avec la nouvelle version. Ensuite, fusionnez cette branche dans master / develop car vous ne devriez vraiment pas changer une version finale à moins qu'il ne s'agisse d'un correctif qui devrait probablement être fusionné dans votre code source. Supprimez ensuite cette branche car elle n'est plus nécessaire. Si vous devez appliquer un autre correctif à cette nouvelle version, répétez les mêmes étapes.
Reportez-vous à la section de l'article suivant qui montre comment fusionner un correctif avec le flux de travail Git de l'auteur - https://hackernoon.com/a-branching-and-releasing-strategy-that-fits-github-flow-be1b6c48eca2
la source