Développeur FullStack & Devops

git est un système de gestion de version collaboratif qui permet de garder un historique des modifications effectuées sur un ensemble de fichiers à l’instar de TFS de Microsoft. L’une des particularités de Git est qu’il est possible de travailler en local en bénéficiant de la navigation à travers l’historique de nos fichiers. git checkout -b ma-nouvelle-branche  : permet de créer une nouvelle branche ma-nouvelle-branche et se positionner dessus git merge ma-nouvelle-branche  : merge les commits de la branche  ma-nouvelle-branche sur la branche courante (se positionner sur Master pour redescendre ses devs)

Workflow

Le workflow GIT de base est donc le suivant (en répétant les étapes suivantes 1 et 2) :
  1. git checkout -b ma-nouvelle-branche
  2. …travailler sur des fichiers
  3. git add .
  4. git commit -m « msg »
  5. git push
On a ainsi une branche ma-nouvelle-branche qui contiendra des modifications qu’il faudra Rebase ou Merge sur la master (qui est la branche de référence, clean). Il existe des workflow rependus utilisés sur les projets comprenant de nombreux développeurs, notamment le GitHub flow et le Gitflow (article).

Git config

Git comporte 3 niveaux de configurations, que l’on peut modifier avec la commande git config:
  1. git config –system  : appliquée à tous les utilisateurs du système, ainsi qu’à tous leurs repos modifie /etc/gitconfig
  2. git config –global  :appliquée à 1 utilisateur, ainsi qu’à tous ses repos modifie ~/.gitconfig ou ~/.config/git/config
  3. git config –local  : appliquée au répository modifie le fichier contenu dans l’arborescence du repo dans .git/config
Attention en cas de redéfinition de clés de config voici la priorité (la plus spécifique gagne): local > global > system Exemple d’une config utilisateur: git config –global core.editor vi Pour lister un config en particulier utliser :  git config –global -l

Git et SSH sous Windows

Sous Windows faire attention au format de clés SSH (qu’il suffit de tester en essayant de se connecter avec le compte dédié au serveur git sur ce seveur, s’il l’autorise), à défaut utiliser PuTTY Key Generator pour convertir la clé privée: PuTTY-Key-Generator Il est ensuite préférable d’utiliser un fichier de config SSH (qui va associer une clé donnée à un serveur), ce fichier a créer s’il n’existe pas : %USERPROFILE%\.ssh\config  va contenir un ensemble de blocs
Host monserveurgit
    Hostname adresse.dsn.de.mon.server.git.com
    IdentityFile ~/.ssh/ed25519.ppk
    IdentitiesOnly yes

Outils

  • Windows: choco install git  ou git SCM
  • Linux: sudo apt install git-core -y && sudo apt autoremove -y
  • Outils graphiques : Git Kraken (multiplateforme) et le tout nouveau Sublime Merge

Liens

Initialisation local

Lorsqu’on veut qu’une arborescence puisse être gérée par le système Git, il faut initialiser le dossier « racine » c’est à dire que l’on crée un repository avec la commande git init. Pour cela on se positionne dans le dossier en question puis exécuter la commande : git init . Cela va créer un dossier .git (caché) qui contient toutes les informations concernant le nouveau git repository.

Connexion au git server

Pour pouvoir travailler sur un repo distant il suffit :
  1. d’avoir un compte sur le site (Github, bitbucket etc.) ou serveur git distant (git server est disponible sur Linux mais aussi sur les NAS synology par ex)
  2. d’avoir un repository créé sur le serveur
  3. de disposer de l’URI de ce repo distant et des droits suffisant pour se connecter à distance sur le serveur
git remote add nom_de_notre_connexion uri

Utilisation de base

git status  : indique l’état de notre répo local ainsi que la branche sur la quelle nous travaillons. Il est intéressant de l’utiliser constamment pour voir où on en est dans le workflow git log  : donne l’historique des opérations (se positionner dans un répertoire déjà initialisé) git log –oneline  fourni un listing condensé. git add -A  : ajoute tous les fichiers modifiés listés dans la commande git status en zone de Staging. Cet ajout est local, et devra être suivi d’un git commit git commit -m « message_de_commit »  : sauvegarde en local toutes les modifications présentes dans la zone de staging et y associe un message (ne pas négliger ce message) git commit –amend  : permet d’ajouter des fichiers ou de modifier le message associé au dernier commit git commit –no-verify  : permet de bypasser les checks de pre-commit déclenchés par les hooks git push  : envoi sur le serveur git les modifications qui ont été commité en local. Attention pour que cette commande fonctionne, un repo distant doit avoir été préalablement ajouté (souvent nomé origin) git pull  : récupère les modifications coté serveur (fichiers modifiés ou ajoutés). Cette commande est équivalent à un git fetch (récupère les fichiers distants) puis un git merge (ajouter les fichiers distant ajouté à notre branche) git rebase -i HEAD~10 : permet de nettoyer un historique (ici les 10 derniers) de commits dégueux pas encore pushés en utilisant ‘f’ fixup pour fondre les commits  (credit et aussi), voir aussi git rebase  ici.

Git Branch

Les branches permettent de travailler de façon isolée sur une « copie » de l’ensemble du code du répo et il est alors possible de simplement passer d’une branche à l’autre avec des git checkout. C’est utile par exemple lorsqu’on veut implémenter une nouvelle fonctionnalité ou corriger un bug sans affecter le code existant. Pour info, la branche créée à l’initialisation du repo s’appelle « master« . git branch ma-nouvelle-branche  : création d’une nouvelle branche nommée « ma-nouvelle-branche » git branch  : liste les branches ainsi que celle qui est sélectionnée git checkout ma-nouvelle-branche  : permet de se positionner sur la branche « ma-nouvelle-branche » git checkout –  : se positionner sur la branche précédente, permet de jongler entre 2 branches git checkout -b ma-nouvelle-branche  : permet de créer une nouvelle branche ma-nouvelle-branche et se positionner dessus git merge ma-nouvelle-branche  : merge les commits de la branche  ma-nouvelle-branche sur la branche courante (se positionner sur Master pour redescendre ses devs)

Workflow

Le workflow GIT de base est donc le suivant (en répétant les étapes suivantes 1 et 2) :
  1. git checkout -b ma-nouvelle-branche
  2. …travailler sur des fichiers
  3. git add .
  4. git commit -m « msg »
  5. git push
On a ainsi une branche ma-nouvelle-branche qui contiendra des modifications qu’il faudra Rebase ou Merge sur la master (qui est la branche de référence, clean). Il existe des workflow rependus utilisés sur les projets comprenant de nombreux développeurs, notamment le GitHub flow et le Gitflow (article).

Git config

Git comporte 3 niveaux de configurations, que l’on peut modifier avec la commande git config:
  1. git config –system  : appliquée à tous les utilisateurs du système, ainsi qu’à tous leurs repos modifie /etc/gitconfig
  2. git config –global  :appliquée à 1 utilisateur, ainsi qu’à tous ses repos modifie ~/.gitconfig ou ~/.config/git/config
  3. git config –local  : appliquée au répository modifie le fichier contenu dans l’arborescence du repo dans .git/config
Attention en cas de redéfinition de clés de config voici la priorité (la plus spécifique gagne): local > global > system Exemple d’une config utilisateur: git config –global core.editor vi Pour lister un config en particulier utliser :  git config –global -l

Git et SSH sous Windows

Sous Windows faire attention au format de clés SSH (qu’il suffit de tester en essayant de se connecter avec le compte dédié au serveur git sur ce seveur, s’il l’autorise), à défaut utiliser PuTTY Key Generator pour convertir la clé privée: PuTTY-Key-Generator Il est ensuite préférable d’utiliser un fichier de config SSH (qui va associer une clé donnée à un serveur), ce fichier a créer s’il n’existe pas : %USERPROFILE%\.ssh\config  va contenir un ensemble de blocs
Host monserveurgit
    Hostname adresse.dsn.de.mon.server.git.com
    IdentityFile ~/.ssh/ed25519.ppk
    IdentitiesOnly yes

Outils

  • Windows: choco install git  ou git SCM
  • Linux: sudo apt install git-core -y && sudo apt autoremove -y
  • Outils graphiques : Git Kraken (multiplateforme) et le tout nouveau Sublime Merge

Liens

rédigé par behrouze le 28/05/2018
Cheat SheetsOutilsVidéosA propos