Séminaire Git

1 - Débuter avec Git

Adrien Krähenbühl Équipe IMAGeS - ICube

Git, c’est quoi ?


C’est un logiciel permettant de gérer les versions successives d’un répertoire.

Les versions successives d’un répertoire :

  • constituent son historique,
  • sont représentées par un graphe.

Comment ça marche ?

  • Git sauvegarde l’historique de votre répertoire dans un répertoire caché .git à la racine de votre répertoire versionné.
  • Git stocke les différences entre les versions successives de votre répertoire.

Que peut-on faire avec Git ?

Dans un répertoire versionné avec Git, on peut :

1 - sauvegarder l’état courant du répertoire
Création d’un nouveau nœud comme “feuille” du graphe.
2 - visualiser une ancienne version du répertoire
Déplacement dans le graphe.
3 - gérer plusieurs versions du répertoire en parallèle
Coexistence de plusieurs branches dans le graphe.
4 - synchroniser ce répertoire avec un autre répertoire, local ou distant
Travail collaboratif avec fusion de graphes.

Fichiers textes vs. binaires

Git est conçu pour gérer des fichiers texte
.txt, .md, .html, .css, .js, .json, .tex, .bib, .cpp, .c, .h, Makefile, .java, .py, .mat, .csv, …
Git n’est pas conçu pour gérer des fichiers binaires
PDF, images, {Microsoft|Libre} Office, archives, … mais Git peut les versionner.

Initialisation

Installation de Git

Linux
  $ sudo apt install git gitk
MacOS
  $ brew install git gitk
Windows
  1. Téléchargez git ici : https://git-scm.com/download/win
  2. Installez-le

Vous avez alors accès à :

  • la commande git pour gérer vos répertoires
  • la commande gitk, interface graphique pour visualiser le graphe

Initialiser un répertoire

  1. Créez un répertoire pour cette séance
$ mkdir TutoGit
  1. Initialisez un répertoire Git ProjetBase
$ cd TutoGit
$ git init ProjetBase
  1. Regardez le contenu du répertoire ProjetBase
$ ls -a ProjetBase
.  ..  .git


Configurer le répertoire

  1. Visualisez la configuration du répertoire Git
$ cd ProjetBase
$ git config -l
  1. Configurez nom et email pour ce répertoire
$ git config user.name "[mon pseudo]"
$ git config user.email "[mon adresse mail]"
  1. Visualisez à nouveau la configuration du répertoire Git
Note :

Vous pouvez configurer ces informations globalement pour tous vos répertoires gérés par git :

$ git config --global ...
Toute configuration locale est prioritaire sur la configuration globale.

Gérer un répertoire local

Ajouter des fichiers

  1. Regardez l’état de votre répertoire
$ git status
  1. Créez 2 fichiers contenant 2 lignes de texte
$ echo "1ere ligne" > fichier1.txt; echo "2eme ligne" >> fichier1.txt
$ echo "1. IMAGeS" > fichier2.txt; echo "2. Git" >> fichier2.txt
$ git status


  1. Ajoutez le premier fichier à la zone de transit
$ git add fichier1.txt
$ git status
  1. Modifiez le fichier ajouté à l’étape 3.
$ echo "3eme ligne" >> fichier1.txt
$ git status

État des fichiers

  • Untracked : dans le répertoire mais non pris en compte par Git
  • Unmodified : non modifié depuis la dernière sauvegarde
  • Modified : modifié depuis la dernière sauvegarde
  • Staged : ajouté à la zone de transit pour la prochaine sauvegarde

Les commits

C’est un un enregistrement local des fichiers.


  1. Commitez la zone de transit
$ git commit -m "Ajout de fichier1.txt"
$ git status


  1. Regardez :

a - l’historique de votre répertoire

$ git log

b - les différences avec le dernier commit

$ git diff

c - graphiquement l’état du répertoire

$ gitk

Les commits


Commitez toutes les modifications depuis le dernier commit :

$ git commit -a -m "Modification de fichier1"
$ git status


Cette commande effectue un git add pour tous les fichiers dans l’état Modified.

Se balader dans les commits

  1. Revenez à l’état du 1\(^{ier}\) commit
$ git checkout xxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ git log



  1. Regardez le contenu du premier fichier
$ cat fichier1.txt

  1. Revenez à l’état du 2\(^{ème}\) commit
$ git checkout master
$ cat fichier1.txt


Pour se balader dans les commits, il faut que tous les fichiers soient dans l’état Unmodified.

Se balader dans les commits

  1. Ajouter le deuxième fichier à git commitez-le
$ git add fichier2.txt
$ git commit -m "Ajout de fichier2.txt"
$ git status



  1. Revenez à l’état d’un précédent commit
$ git checkout xxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ ls



  1. Revenez à l’état de votre dernier commit
$ git checkout master
$ ls


Manipuler les fichiers

Règle importante
Dans un répertoire géré par git, on ne manipule pas les fichiers versionnés avec l’OS (explorateur, ligne de commande) mais exclusivement avec git.
  • Pour renommer/déplacer un fichier :
$ git mv fichier1.txt fichier3.txt
$ ls
$ git status
  • Pour supprimer un fichier :
$ git rm fichier2.txt
$ ls
$ git status
Note :
Comme précédemment, il faut ajouter ces modifications à la zone de transit et les commiter pour qu’elles soient prise en compte.

Annuler des modifications locales

  1. Enlevez le fichier supprimé de la zone de transit
$ git reset HEAD fichier2.txt
$ ls
$ git status
  1. Annulez la suppression du fichier
$ git checkout fichier2.txt
$ ls
$ git status

Synchroniser deux dépôts

Cloner un dépôt git existant

  1. Commitez la zone de transit de ProjetBase
$ git commit -m "Renommage de fichier1 en fichier3"



  1. Clonez le 1\(^{ier}\) dépôt Git dans le répertoire de cette séance


$ cd ..
$ git clone ProjetBase/ ProjetClone
$ cd ProjetClone
$ ls
$ git log


Cloner un dépôt implique une copie de toute l’histoire du dépôt cloné.

Récupérer l’histoire du dépôt cloné

  1. Dans ProjetBase, modifiez un fichier et commitez
$ cd ../ProjetBase ; echo "Autre chose" >> fichier1.txt
$ git commit -am "Ajout d'une ligne à fichier1.txt"

  1. Dans ProjetClone, récupérez le graphe de ProjetBase
$ cd ../ProjetClone
$ git fetch origin master


  1. Fusionnez le graphe de ProjetBase
$ git merge origin master


Note : Dans 95% das cas, on utilise git pull = git fetch + git merge

Pour aller plus loins

Mémos

Logiciels

Liens intéressants