web-dev-qa-db-fra.com

Bonnes pratiques de branchement et de balisage Git

J'apprends actuellement à utiliser Git en lisant Pro Git . En ce moment, j'apprends les branchements et les balises. Ma question est de savoir quand dois-je utiliser une branche et quand dois-je utiliser une balise?

Par exemple, disons que je crée une branche pour la version 1.1 d'un projet. Lorsque j'ai terminé et publié cette version, dois-je quitter la branche pour marquer la version finale? Ou dois-je ajouter une balise? Si j'ajoute une balise, dois-je supprimer la branche de version (en supposant qu'elle est fusionnée dans master ou dans une autre branche)?

149
Code-Guru

En bref: La meilleure pratique consiste à se diversifier, fusionner souvent et rester toujours synchronisé .

Il existe des conventions assez claires pour conserver votre code dans des branches distinctes de la branche principale:

  1. Vous êtes sur le point de mettre en œuvre un changement majeur ou perturbateur
  2. Vous êtes sur le point d'apporter des modifications qui pourraient ne pas être utilisées
  3. Vous voulez expérimenter quelque chose dont vous n'êtes pas sûr que cela fonctionnera
  4. Lorsque l'on vous dit de vous diversifier, d'autres pourraient avoir quelque chose à faire en maître

La règle générale est après la dérivation, vous devez rester synchronisé avec la branche principale. Parce que finalement, vous devez le fusionner pour le maîtriser. Afin d'éviter un énorme gâchis compliqué de conflits lors de la fusion, vous devez vous engager souvent, fusionner souvent.

Bonnes pratiques à suivre

n modèle de branchement Git réussi par Vincent Driessen a de bonnes suggestions. Si ce modèle de branchement vous plaît, considérez le extension de flux vers git . D'autres ont commenté le flux .

Pratiques de marquage

Comme vous le savez déjà, Git vous donne des identifiants de commit comme 1.0-2-g1ab3183 mais ce ne sont pas des tags! Le balisage se fait avec la balise git, et les balises créées à l'aide de la balise git sont la base des identificateurs de validation que git describe crée. En d'autres termes, dans Git, vous ne balisez pas les branches. Vous balisez les commits. Il est correct de dire que la balise n'est qu'un pointeur annoté vers une validation.

Regardons l'exemple pratique qui l'a démontré,

/- [v1.0] 
 v 
 ---. ---. --- .--- S ---.--- A <- - maître 
\
\-.--- B <- test 

Commettons la validation 'S' par la balise 'v1.0'. Cette validation est à la fois sur la branche "maître" et sur la branche "test". Si vous exécutez " git describe " en haut de la validation 'A' (en haut de la branche 'master'), vous obtiendrez quelque chose comme v1.0-2-g9c116e9. Si vous exécutez "git describe" au-dessus du commit 'A' (alias la branche 'test'), vous obtiendrez quelque chose comme v1.0-2-g3f55e41, c'est le cas avec la configuration git-describe par défaut. Notez que ce résultat est légèrement différent. v1.0-2-g9c116e9 signifie que nous sommes en train de valider avec l'identifiant SHA-1 trié de 9c116e9, 2 validations après la balise v1.0. Il n'y a pas de balise v1.0-2!

Si vous souhaitez que votre balise n'apparaisse que sur la branche 'master', vous pouvez créer un nouveau commit (par exemple, seulement mettre à jour les informations de version par défaut/de secours dans GIT-VERSION-FILE) après le point de branchement de la branche 'test'. Si vous balisez les validations sur la branche 'test' avec par exemple 'v1.0.3` il ne serait visible que depuis' test '.

Références

J'ai trouvé de très nombreux blogs et articles utiles pour apprendre. Cependant, ceux qui sont illustrés professionnellement sont rares. Ainsi, je voudrais recommander un post - n modèle de branchement Git réussi par @nvie. J'ai emprunté son illustration :)

enter image description here

167
Yusubov

Une branche est utilisée si vous disposez de 2 versions différentes du référentiel en même temps. Une balise est un moyen de marquer un point dans le temps dans votre référentiel.

Vous devez ajouter une balise pour marquer une version publiée. Si vous devez ensuite apporter des corrections de bogues à cette version, vous créerez une branche au niveau de la balise.

Vous souhaitez uniquement supprimer les branches qui ont été fusionnées dans la HEAD [ou une autre branche].

37
gam3