Ce document rassemble les bonnes pratiques appliquées par l'agence web Alsacreations.fr concernant "Git". Ces indications sont destinées à évoluer dans le temps et à s'adapter à chaque nouveau projet.
Conventional Commits
▶️ Nous respectons les Conventional Commits https://www.conventionalcommits.org/fr/v1.0.0/
- build: Changements relatifs au processus de build ou dépendances comme vite ou npm.
- ci: Changements des fichiers de configurations de la CI comme workflows GitHub.
- docs: Changements relatifs à la documentation du projet (wiki, readme, commentaires).
- feat: Changements qui ajoutent un nouvelle fonctionnalité.
- Dans le cas d'un site, c'est une fonctionnalité pour l'utilisateur final.
- Dans le cas d'un projet du type "framework css" comme Bretzel, une feature est l'ajout d'une nouvelle classe CSS par exemple.
- fix: Changements qui corrigent un bug visible pour l'utilisateur final.
- Pour savoir si le commit est vraiment un fix ou non, se poser la question: "Mon commit vaut-il le coup d'être affiché dans un changelog ou non ?"
- Si oui, c'est un
fix:.
- perf: Changements qui améliorent la performance du projet.
- refactor: Changements qui ne sont ni un bug ni une feature.
- Exemple: j'arrive à reproduire le même fonctionnement qu'avant mais en supprimant 50 lignes de code.
- Exemple: je renomme une fonction mais le fonctionnement reste le même.
- style: Changements qui ne modifient pas le fonctionnement du code.
- Exemple: formatage de fichiers avec eslint, prettier, ajout d'espaces, etc.
- test: Ajout ou modifications de tests unitaires, d'intégration et e2e.
- chore: Quand le reste ne convient pas.
- Exemple: modification du fichier de configuration eslint, prettier, tâches de maintenance interne, mise à jour des dépendances.
Git flow, branches
| branche | rôle |
|---|---|
| main | code en production (= en ligne sur le serveur d'hébergement) |
| develop | développements en cours avant d’être fusionnés dans main |
| feat/nomfeature | développement d'une fonctionnalité, à partir de develop |
| fix/nomfix | correction de bug |
Schéma :
%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showCommitLabel': false}} }%%
gitGraph
commit
branch develop
checkout develop
commit
commit
branch feat/something
checkout feat/something
commit
commit
checkout develop
merge feat/something
commit
branch fix/something
checkout fix/something
commit
checkout develop
merge fix/something
commit
checkout main
merge develop
commit
💡 Penser à reprendre les références (#issue ou #tâche) dans le nom de la branche / les messages de commit.
Résoudre les conflits
Lors d’un git pull ou d’un git merge, des conflits peuvent survenir si les mêmes lignes d’un même fichier ont été modifiées différemment dans les branches fusionnées.
Pour résoudre ces conflits, Git marque les sections en conflit dans les fichiers concernés. Vous devez alors :
- Ouvrir les fichiers en conflit et rechercher les sections marquées par Git.
- Choisir quelle version des modifications conserver (celles de votre branche ou celles de la branche fusionnée).
- Supprimer les marqueurs de conflit (
<<<<<<<,=======,>>>>>>>) et enregistrer les fichiers. - Ajouter les fichiers résolus à l'index avec
git add <fichier>. - Finaliser la fusion avec
git commit.
# Exemple de résolution de conflit
git add <fichier_conflit>
git commit
Pour éviter les conflits, il est recommandé de faire des git pull fréquents et de communiquer avec votre équipe sur les modifications apportées aux fichiers partagés.
💡 Git dispose d'une fonctionnalité appelée "rerere" (reuse recorded resolution) qui peut aider à automatiser la résolution des conflits récurrents. Lorsque cette fonctionnalité est activée, Git enregistre les résolutions de conflits que vous effectuez et les réutilise automatiquement si les mêmes conflits se produisent à nouveau.
git config --global rerere.enabled true