Memento Git avancé

Estimated reading time:3 minutes 32 seconds
programmation développement git versioning CI gitflow

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 master

    git 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 master

    git 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]

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 [email protected]
  • 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
  • vérifier la connexion: ssh -T [email protected]

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
  • 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

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
  • 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

Next Post Previous Post