-
1. DĂ©marrage rapide
-
2. Les bases de Git
-
3. Les branches avec Git
-
4. Git sur le serveur
- 4.1 Protocoles
- 4.2 Installation de Git sur un serveur
- 4.3 Génération des clés publiques SSH
- 4.4 Mise en place du serveur
- 4.5 DĂ©mon (Daemon) Git
- 4.6 HTTP intelligent
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git hébergé
- 4.10 Résumé
-
5. Git distribué
-
6. GitHub
-
7. Utilitaires Git
- 7.1 SĂ©lection des versions
- 7.2 Indexation interactive
- 7.3 Remisage et nettoyage
- 7.4 Signer votre travail
- 7.5 Recherche
- 7.6 RĂ©Ă©crire lâhistorique
- 7.7 Reset démystifié
- 7.8 Fusion avancée
- 7.9 Rerere
- 7.10 DĂ©boguer avec Git
- 7.11 Sous-modules
- 7.12 Empaquetage (bundling)
- 7.13 Replace
- 7.14 Stockage des identifiants
- 7.15 Résumé
-
8. Personnalisation de Git
- 8.1 Configuration de Git
- 8.2 Attributs Git
- 8.3 Crochets Git
- 8.4 Exemple de politique gérée par Git
- 8.5 Résumé
-
9. Git et les autres systĂšmes
- 9.1 Git comme client
- 9.2 Migration vers Git
- 9.3 Résumé
-
10. Les tripes de Git
- 10.1 Plomberie et porcelaine
- 10.2 Les objets de Git
- 10.3 Références Git
- 10.4 Fichiers groupés
- 10.5 La refspec
- 10.6 Les protocoles de transfert
- 10.7 Maintenance et récupération de données
- 10.8 Les variables dâenvironnement
- 10.9 Résumé
-
A1. Annexe A: Git dans dâautres environnements
- A1.1 Interfaces graphiques
- A1.2 Git dans Visual Studio
- A1.3 Git dans Visual Studio Code
- A1.4 Git dans IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git dans Sublime Text
- A1.6 Git dans Bash
- A1.7 Git dans Zsh
- A1.8 Git dans PowerShell
- A1.9 Résumé
-
A2. Annexe B: Embarquer Git dans vos applications
- A2.1 Git en ligne de commande
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Commandes Git
- A3.1 Installation et configuration
- A3.2 Obtention et création des projets
- A3.3 Capture dâinstantanĂ© basique
- A3.4 Création de branches et fusion
- A3.5 Partage et mise Ă jour de projets
- A3.6 Inspection et comparaison
- A3.7 DĂ©bogage
- A3.8 Patchs
- A3.9 Courriel
- A3.10 SystĂšmes externes
- A3.11 Administration
- A3.12 Commandes de plomberie
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.
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Ă©.
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 :
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 :
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.