
Memento Git avancé
Voici une liste des notions avancées utilisées par Git.
Ce fichier est un canevas qui s'étoffera au fur et à mesure de mes expérimentations sur cet outil et son éco système .
Références/Sources:
Workflows
- ce sont des optimisation du fonctionnement de git sous forme de modèles
- le plus utilisé est le modèle Git Flow
Git Flow
- branches utilisées: master,develop,hotfix,release(test),feature (plusieurs branches)
- master = environnement de production: Aucune modifications directe (commit).
- develop = environnement de recette: centralise toutes les nouvelles fonctionnalités qui seront livrées dans la prochaine version. Eviter les modifications directe (commit).
- feature = nouvelle fonctionnalité. Créée à partir de develop pour chaque nouvelle fonctionnalité. Une fois terminée, fusionner dans develop.
- hotfix = correction de bug en production. Créée à partir de master. Une fois terminée, fusionner dans develop et dans master. Faire des modif minimales !
- release = réalisation des tests avant livraison. Créée à partir de develop. Une fois terminée, fusionner dans develop et dans master.
en utilisant git
-
1 créer la branche develop:
`git branch develop
-
2 développer UNE fonctionnalité:
créer une branche de type feature (depuis develop):git checkout -b feature/[name] develop
-
3 une fois le développement terminé, merger dans develop
git checkout dev git merge feature/[name] --no-ff git branch -d feature/[name]
-
4 préparer une nouvelle version en production
créer une branche de type release (depuis develop):git checkout -b release/[name] develop
tester la branche (et faire éventuellement des modifs mineures)
merger dans develop et dans mastergit checkout dev git merge release/[version] --no-ff git checkout master git merge release/[version] --no-ff git tag [version] git branch -d release/[version]
-
5 corriger un bug en production
créer une branche de type hotfix (depuis master):git checkout -b hotfix/[name] master
une fois le développement terminé, merger dans develop et dans mastergit checkout dev git merge hotfix/[name] --no-ff git checkout master git merge hotfix/[name] --no-ff git tag [version] git branch -d hotfix/[name]
en utilisant l'outil git flow
- il doit être installé en plus de git:
yay gitflow
(Arch linux) - commandes de base:
- initialiser Git et GitFlow dans un projet:
git flow init
- démarrer une fonctionnalité:
git flow feature start [name]
- terminer une fonctionnalité:
git flow feature finish [name]
- démarrer une release:
git flow release start [version]
- terminer une release:
git flow release finish [name]
- démarrer un hotfix:
git flow hotfix start [version]
- terminer un hotfix:
git flow hotfix finish [name]
- initialiser Git et GitFlow dans un projet:
Divers
connexion SSH avec un dépot distant (exemple : gitlab.com)
- créer une nouvelle paire de clés SSH (rsa):
ssh-keygen -t rsa -b 4096 -C laurent@gameamea.com
- ajouter la clé au dépot distant
- copier le contenu de la clé PUBLIQUE dans le presse-papier:
xclip -sel clip > ~/.sh/id_rsa.pub
- ajouter la clé en collant son contenu dans les paramètres du dépot
- copier le contenu de la clé PUBLIQUE dans le presse-papier:
- vérifier la connexion:
ssh -T git@gitlab.com
Supprimer des commits déjà Pushé
git reset --hard [SHA]
git clean -f -d
git push -f
Synchroniser un dépot local Forké avec son parent
- add the original project as a remote named 'upstream':
git remote add --track [branche] upstream [git://github.com/upstreamname/projectname.git]
- update the current branch with upstream:
git fetch upstream;git merge [upstream/branche]
Configurer Beyond compare (Linux) comme outil de diff/merge
- Diff:
git config --global diff.tool bc3;git config --global difftool.bc3.trustExitCode true
- Merge (Pro only):
git config --global merge.tool bc3;git config --global mergetool.bc3.trustExitCode true
Comparer des fichiers provenant de deux branches différentes
en utilisant git diff
- comparer le fichier d'une branche à une autre branche V1:
git diff [branch1:file] [branch2:file]
- exemple:
git diff master:modules/gdscript/gdscript_tokenizer.h gdscript_format_updated:modules/gdscript/gdscript_tokenizer.cpp
- exemple:
- comparer le fichier d'une branche à une autre branche V2:
git diff [branch1name] [branch2name] [path/to/file]
- comparer le fichier d'une branche à une autre branche V3:
git diff [source_branch] [target_branch] -- [path/to/file]
- comparer votre répertoire de travail actuel à une branche quelconque:
git diff ..[someBranch] [path/to/file]
- exemple:
git diff ..master myfile.cs
- exemple:
en utilisant le "diff tool" configuré
- comparer le fichier d'une branche à une autre branche V1:
git difftool [branch1:file] [branch2:file]
- exemple:
git difftool master:modules/gdscript/gdscript_tokenizer.h gdscript_format_updated:modules/gdscript/gdscript_tokenizer.cpp
- exemple:
- comparer le fichier d'une branche à une autre branche V2:
git difftool [branch1name] [branch2name] [path/to/file]
- comparer le fichier d'une branche à une autre branche V3:
git difftool [source_branch] [target_branch] -- [path/to/file]
- comparer votre répertoire de travail actuel à une branche quelconque:
git difftool ..[someBranch] [path/to/file]
- exemple:
git difftool ..master myfile.cs
- exemple: