Git 🌙
Chapters â–Ÿ 2nd Edition

3.4 Les branches avec Git - Travailler avec les branches

Travailler avec les branches

Maintenant que vous avez acquis les bases concernant les branches et les fusions (merges), que pouvez-vous ou devez-vous en faire ? Ce chapitre traite des différents processus que cette gestion de branche légÚre permet de mettre en place, de maniÚre à vous aider à décider si vous souhaitez en incorporer un dans votre cycle de développement.

Branches au long cours

Comme Git utilise une fusion Ă  3 sources, fusionner une mĂȘme branche dans une autre plusieurs fois sur une longue pĂ©riode est gĂ©nĂ©ralement facile. Cela signifie que vous pouvez avoir plusieurs branches ouvertes en permanence pour diffĂ©rentes phases de votre cycle de dĂ©veloppement. Vous pourrez fusionner rĂ©guliĂšrement ces branches entre elles.

De nombreux dĂ©veloppeurs travaillent avec Git selon une mĂ©thode qui utilise cette approche. Il s’agit, par exemple, de n’avoir que du code entiĂšrement stable et testĂ© dans leur branche master ou bien mĂȘme uniquement du code qui a Ă©tĂ© ou sera publiĂ© au sein d’une release. Ils ont alors en parallĂšle une autre branche appelĂ©e develop ou next. Cette branche accueille les dĂ©veloppements en cours qui font encore l’objet de tests de stabilitĂ© — cette branche n’est pas nĂ©cessairement toujours stable mais quand elle le devient, elle peut ĂȘtre intĂ©grĂ©e (via une fusion) dans master. Cette branche permet d’intĂ©grer des branches thĂ©matiques (topic branches : branches de faible durĂ©e de vie telles que votre branche iss53), une fois prĂȘtes, de maniĂšre Ă  s’assurer qu’elles passent l’intĂ©gralitĂ© des tests et n’introduisent pas de bugs.

En rĂ©alitĂ©, nous parlons de pointeurs qui se dĂ©placent le long des lignes des commits rĂ©alisĂ©s. Les branches stables sont plus basses dans l’historique des commits tandis que les branches des derniers dĂ©veloppements sont plus hautes dans l’historique.

Vue linéaire de branches dans un processus de _stabilité progressive_
Figure 26. Vue linéaire de branches dans un processus de stabilité progressive

Il est gĂ©nĂ©ralement plus simple d’y penser en termes de silos de tĂąches oĂč un ensemble de commits Ă©volue progressivement vers un silo plus stable une fois qu’il a Ă©tĂ© complĂštement testĂ©.

Vue _en silo_ de branches dans un processus de _stabilité progressive_
Figure 27. Vue « en silo » de branches dans un processus de stabilité progressive

Vous pouvez reproduire ce schĂ©ma sur plusieurs niveaux de stabilitĂ©. Des projets plus gros ont aussi une branche proposed ou pu (proposed updates) qui intĂšgre elle-mĂȘme des branches qui ne sont pas encore prĂȘtes Ă  ĂȘtre intĂ©grĂ©es aux branches next ou master. L’idĂ©e est que les branches Ă©voluent Ă  diffĂ©rents niveaux de stabilité : quand elles atteignent un niveau plus stable, elles peuvent ĂȘtre fusionnĂ©es dans la branche de stabilitĂ© supĂ©rieure. Une fois encore, disposer de multiples branches au long cours n’est pas nĂ©cessaire mais s’avĂšre souvent utile, spĂ©cialement dans le cadre de projets importants et complexes.

Les branches thématiques

Les branches thĂ©matiques, elles, sont utiles quelle que soit la taille du projet. Une branche thĂ©matique est une branche ayant une courte durĂ©e de vie crĂ©Ă©e et utilisĂ©e pour une fonctionnalitĂ© ou une tĂąche particuliĂšre. C’est une mĂ©thode que vous n’avez probablement jamais utilisĂ©e avec un autre VCS parce qu’il y est gĂ©nĂ©ralement trop lourd de crĂ©er et fusionner des branches. Mais dans Git, crĂ©er, dĂ©velopper, fusionner et supprimer des branches plusieurs fois par jour est monnaie courante.

Vous avez dĂ©jĂ  vu ces branches dans la section prĂ©cĂ©dente avec les branches iss53 et correctif que vous avez crĂ©Ă©es. Vous y avez rĂ©alisĂ© quelques commits et vous les avez supprimĂ©es immĂ©diatement aprĂšs les avoir fusionnĂ©es dans votre branche principale. Cette technique vous permet de changer de contexte rapidement et complĂštement. Parce que votre travail est isolĂ© dans des silos oĂč toutes les modifications sont liĂ©es Ă  une thĂ©matique donnĂ©e, il est beaucoup plus simple de rĂ©aliser des revues de code. Vous pouvez conserver vos modifications dans ces branches pendant des minutes, des jours ou des mois puis les fusionner quand elles sont prĂȘtes, indĂ©pendamment de l’ordre dans lequel elles ont Ă©tĂ© crĂ©Ă©es ou traitĂ©es.

Prenons l’exemple suivant : alors que vous dĂ©veloppez (sur master), vous crĂ©ez une nouvelle branche pour un problĂšme (prob91), travaillez un peu sur ce problĂšme puis crĂ©ez une seconde branche pour essayer de trouver une autre maniĂšre de le rĂ©soudre (prob91v2). Vous retournez ensuite sur la branche master pour y travailler pendant un moment puis finalement crĂ©ez une derniĂšre branche (ideeidiote) contenant une idĂ©e dont vous doutez de la pertinence. Votre historique de commits pourrait ressembler Ă  ceci :

Branches thématiques multiples
Figure 28. Branches thématiques multiples

Maintenant, supposons que vous dĂ©cidiez que vous prĂ©fĂ©rez la seconde solution pour le problĂšme (prob91v2) et que vous ayez montrĂ© la branche ideeidiote Ă  vos collĂšgues qui vous ont dit qu’elle Ă©tait gĂ©niale. Vous pouvez jeter la branche prob91 originale (perdant ainsi les commits C5 et C6) et fusionner les deux autres branches. Votre historique ressemble Ă  prĂ©sent Ă  ceci :

Historique aprĂšs la fusion de `ideeidiote` et `prob91v2`
Figure 29. Historique aprĂšs la fusion de ideeidiote et prob91v2

Nous verrons au chapitre Git distribuĂ©, d’autres mĂ©thodes et processus possibles pour vos projets Git. Nous vous invitons Ă  prendre connaissance de ce chapitre avant de vous dĂ©cider pour une mĂ©thode particuliĂšre de gestion de vos branches pour votre prochain projet.

Il est important de se souvenir que lors de la rĂ©alisation de toutes ces actions, ces branches sont complĂštement locales. Lorsque vous crĂ©ez et fusionnez des branches, ceci est rĂ©alisĂ© uniquement dans votre dĂ©pĂŽt Git local et aucune communication avec un serveur n’a lieu.

scroll-to-top