web-dev-qa-db-fra.com

Quels sont quelques exemples de pratiques couramment utilisées pour nommer les branches git?

J'utilise un référentiel git local en interaction avec le référentiel CVS de mon groupe depuis plusieurs mois maintenant. J'ai fabriqué un nombre presque névrotique de branches, dont la plupart ont heureusement été fusionnées dans mon coffre. Mais nommer commence à devenir un problème. Si une tâche est facilement nommée avec une étiquette simple, mais que je la réalise en trois étapes, chacune comprenant sa propre branche et sa propre situation de fusion, je peux alors répéter le nom de la branche à chaque fois, mais l'histoire est un peu déroutante. Si je deviens plus spécifique dans les noms, avec une description séparée pour chaque étape, les noms des branches commencent à devenir longs et difficiles à manier.

J'ai appris en parcourant d'anciens fils de discussion que je pouvais commencer à nommer des branches avec un/dans le nom, c'est-à-dire un sujet/une tâche, ou quelque chose du genre. Je vais peut-être commencer à le faire et voir si cela aide à mieux organiser les choses.

Quelles sont les meilleures pratiques pour nommer les branches git?

Edit: Personne n’a suggéré de convention de nommage. Je supprime des branches lorsque j'en ai terminé. Il se trouve que j'en ai plusieurs autour parce que la direction ajuste constamment mes priorités. :) Par exemple, si j'ai besoin de plusieurs branches pour une tâche, supposons que je dois valider le premier jalon discret de la tâche dans le référentiel CVS du groupe. À ce moment-là, en raison de mon interaction imparfaite avec CVS, je pouvais exécuter cette validation puis tuer cette branche. (J'ai vu trop d'étranges interactions avec CVS ​​si j'essaie de continuer à utiliser la même branche à ce moment-là.)

986
skiphoppy

Voici quelques conventions de dénomination de branche que j'utilise et leurs raisons.

Conventions de nommage des branches

  1. Utilisez des jetons de regroupement (mots) au début de vos noms de branche.
  2. Définissez et utilisez des jetons d'accès abrégés pour différencier les branches de manière significative pour votre flux de travail.
  3. Utilisez des barres obliques pour séparer les parties des noms de vos branches.
  4. N'utilisez pas de nombres nus comme pièces principales.
  5. Évitez les noms descriptifs longs pour les branches à vie longue.

jetons de groupe

Utilisez les jetons de "regroupement" devant les noms de vos branches.

group1/foo
group2/foo
group1/bar
group2/bar
group3/bar
group1/baz

Les groupes peuvent être nommés comme bon vous semble pour correspondre à votre flux de travail. J'aime utiliser des noms courts pour les miens. Lisez la suite pour plus de clarté.

jetons bien définis

Choisissez des jetons courts pour ne pas ajouter trop de bruit à chacun de vos noms de branche. J'utilise ces:

wip       Works in progress; stuff I know won't be finished soon
feat      Feature I'm adding or expanding
bug       Bug fix or experiment
junk      Throwaway branch created to experiment

Chacun de ces jetons peut être utilisé pour vous indiquer à quelle partie de votre flux de travail appartient chaque branche.

On dirait que vous avez plusieurs branches pour différents cycles de changement. Je ne sais pas quels sont vos cycles, mais supposons qu’ils soient "nouveaux", "testés" et "vérifiés". Vous pouvez nommer vos branches avec des versions abrégées de ces balises, toujours orthographiées de la même manière, pour les regrouper et vous rappeler à quelle étape vous vous trouvez.

new/frabnotz
new/foo
new/bar
test/foo
test/frabnotz
ver/foo

Vous pouvez rapidement identifier les branches ayant atteint chaque stade et les regrouper facilement à l'aide des options de correspondance de modèles de Git.

$ git branch --list "test/*"
test/foo
test/frabnotz

$ git branch --list "*/foo"
new/foo
test/foo
ver/foo

$ gitk --branches="*/foo"

tilisez des barres obliques pour séparer les pièces

Vous pouvez utiliser la plupart des délimiteurs de votre choix dans les noms de branche, mais je trouve les barres obliques plus flexibles. Vous préférerez peut-être utiliser des tirets ou des points. Mais les barres obliques vous permettent de renommer certaines branches lorsque vous poussez ou extrayez de/vers une télécommande.

$ git Push Origin 'refs/heads/feature/*:refs/heads/phord/feat/*'
$ git Push Origin 'refs/heads/bug/*:refs/heads/review/bugfix/*'

Pour moi, les barres obliques fonctionnent également mieux pour le développement des onglets (exécution de la commande) dans mon shell. Comme je l'ai configuré, je peux rechercher des branches avec différentes sous-parties en tapant les premiers caractères de la partie et en appuyant sur la touche TAB. Zsh me donne alors une liste de branches qui correspondent à la partie du jeton que j'ai tapé. Cela fonctionne aussi bien pour les jetons précédents que pour ceux incorporés.

$ git checkout new<TAB>
Menu:  new/frabnotz   new/foo   new/bar


$ git checkout foo<TAB>
Menu:  new/foo   test/foo   ver/foo

(Zshell est très configurable sur l'achèvement de la commande et je pourrais également le configurer pour gérer les tirets, les traits de soulignement ou les points de la même manière. Mais j'ai choisi de ne pas le faire.)

Il vous permet également de rechercher des branches dans de nombreuses commandes git, comme ceci:

git branch --list "feature/*"
git log --graph --oneline --decorate --branches="feature/*" 
gitk --branches="feature/*" 

Avertissement: comme le souligne Slipp dans les commentaires, les barres obliques peuvent causer des problèmes. Les branches étant implémentées en tant que chemins, vous ne pouvez pas avoir une branche nommée "foo" et une autre branche nommée "foo/bar". Cela peut être déroutant pour les nouveaux utilisateurs.

Ne pas utiliser de nombres nus

N'utilisez pas de nombres nus (ou de nombres hexadécimaux) dans votre schéma de dénomination de branche. À l'intérieur de l'extension de tabulation d'un nom de référence, git peut décider qu'un numéro fait partie d'un sha-1 au lieu d'un nom de branche. Par exemple, mon outil de suivi des problèmes nomme les bogues avec des nombres décimaux. Je nomme mes branches associées CRnnnnn plutôt que simplement nnnnn pour éviter toute confusion.

$ git checkout CR15032<TAB>
Menu:   fix/CR15032    test/CR15032

Si j'essayais de développer seulement 15032, git ne serait pas sûr de vouloir rechercher les noms de SHA-1 ou de branche, et mes choix seraient quelque peu limités.

Évitez les noms descriptifs longs

Les noms de branches longs peuvent être très utiles lorsque vous consultez une liste de branches. Mais cela peut gêner lorsque vous regardez des journaux d’une ligne décorés, car les noms des branches peuvent absorber la majeure partie de la ligne et abréger la partie visible du journal.

Par contre, les noms de branches longs peuvent être plus utiles dans les "commits de fusion" si vous ne les réécrivez pas habituellement à la main. Le message de validation de fusion par défaut est Merge branch 'branch-name'. Vous trouverez peut-être plus utile d’afficher les messages de fusion sous la forme Merge branch 'fix/CR15032/crash-when-unformatted-disk-inserted' au lieu de simplement Merge branch 'fix/CR15032'.

843
phord

n modèle de branchement Git réussi par Vincent Driessen a de bonnes suggestions. Une image est ci-dessous. Si ce modèle de branchement vous intéresse, considérez le extension du flux à git . D'autres ont a commenté sur le flux

Le modèle de Driessen comprend

  • Une branche principale, utilisée uniquement pour la publication. Nom typique master.

  • Une branche "développer" de cette branche. C'est celui qui est utilisé pour la plupart des travaux sur les lignes principales. Communément appelé develop.

  • Plusieurs branches de la branche en développement. Nom basé sur le nom de la fonctionnalité. Celles-ci seront fusionnées dans développement, pas dans les branches master ou release.

  • Relâchez la branche pour contenir les versions candidates, avec uniquement des corrections de bogues et aucune nouvelle fonctionnalité. Nom typique rc1.1.

Les correctifs sont des branches éphémères pour les changements qui viennent du maître et iront au maître sans que la branche de développement soit impliquée.

enter image description here

282
Brian Carlton

Ma préférence personnelle est de supprimer le nom de la branche une fois que j'ai terminé avec une branche par sujet.

Au lieu d'essayer d'utiliser le nom de la branche pour expliquer la signification de la branche, je commence la ligne d'objet du message de validation dans le premier commit de cette branche avec "Branch:" et j'inclus des explications supplémentaires dans le corps du message si l'objet ne me donne pas assez d'espace.

Le nom de la branche dans mon utilisation est purement un handle pour faire référence à une branche de sujet tout en travaillant dessus. Une fois que le travail sur la branche est terminé, je supprime le nom de la branche, en balisant parfois le commit pour référence ultérieure.

Cela rend également la sortie de git branch plus utile: elle répertorie uniquement les branches de longue durée et les branches de sujet actives, mais pas toutes les branches.

51

J'ai mélangé et assorti des schémas différents que j'ai vus et basés sur l'outillage que j'utilise. Donc, mon nom de branche complété serait:

nom/caractéristique/numéro de suivi/description courte

qui se traduirait par:

mike/blogs/RSSI-12/logo-fix

Les parties sont séparées par des barres obliques car elles sont interprétées comme des dossiers dans SourceTree pour une organisation facile. Nous utilisons Jira pour le suivi des problèmes. Ainsi, l’inclusion du numéro facilite la recherche dans le système. L'inclusion de ce nombre permet également d'effectuer des recherches lorsque vous essayez de trouver ce problème dans Github lorsque vous essayez de soumettre une demande d'extraction.

44
MikeG

Pourquoi faut-il trois branches/fusions pour chaque tâche? Pouvez-vous expliquer plus à ce sujet?

Si vous utilisez un système de suivi des bogues, vous pouvez utiliser le numéro de bogue dans le nom de la branche. Cela gardera les noms de branches uniques, et vous pouvez les préfixer avec un mot court et descriptif ou deux pour les garder lisibles par l'homme, comme "ResizeWindow-43523". Cela facilite également les choses lorsque vous nettoyez des branches, car vous pouvez rechercher le bogue associé. C'est ainsi que je nomme habituellement mes branches.

Étant donné que ces branches sont finalement fusionnées dans le maître, vous devez les supprimer en toute sécurité après la fusion. Sauf si vous fusionnez avec --squash, l'historique complet de la branche existera toujours si vous en avez besoin.

21
farktronix

Notez, comme illustré dans le commit e703d7 ou commit b6c2a0d (mars 2014), qui fait maintenant partie de Git 2.0, vous trouverez une autre convention de dénomination (que vous pouvez appliquer aux branches) .

"Lorsque vous avez besoin d’espace, utilisez dash" est une étrange façon de dire que vous ne devez pas utiliser d’espace.
Comme il est plus courant que les descriptions de ligne de commande utilisent des mots multiples en pointillés, vous ne souhaitez même pas utiliser d'espaces à ces emplacements.

Un nom de branche ne peut pas avoir d'espace (voir " Quels caractères sont interdits dans un nom de branche? " et git check-ref-format page de manuel ).

Donc, pour chaque nom de branche qui serait représenté par une expression de plusieurs mots, utiliser un '-' (tiret) comme séparateur est une bonne idée.

11
VonC

Pour faire suite à la suggestion de farktronix, nous utilisons les numéros de tickets Jira pour des produits similaires dans Mercurial, et je prévois de les utiliser pour les branches git. Mais je pense que le numéro du ticket lui-même est probablement assez unique. Comme l'a noté farktronix, il est peut-être utile d'avoir un mot descriptif dans le nom de la branche, mais si vous changez de branche assez souvent, vous voudrez probablement moins taper. Ensuite, si vous devez connaître le nom de la succursale, recherchez dans Jira les mots-clés associés dans le ticket si vous ne le connaissez pas. De plus, vous devez inclure le numéro de ticket dans chaque commentaire.

Si votre branche représente une version, il semble que la convention commune consiste à utiliser le format xxx (exemple: "1.0.0") pour les noms de branche et vx.xx (exemple "v1.0.0") pour les noms de balises (pour éviter les conflits). . Voir aussi: convention standard de nommage pour les balises git

5
Gary S. Weaver