Git : Opérations

Vous trouverez dans cet article, quelques opérations/commandes à connaitre pour travailler avec l’outil Git.

Qu’est ce que Git

Git est un logiciel de gestion de versions décentralisé créé par Linus Torvalds en 2005.

Une documentation complète est accessible à partir du site officiel.

Mise en place de Git

Installation de Git

Sur OpenSUSE :

  • Exécutez la commande suivante : $ sudo zypper in --no-recommend git

Sur Windows :

  • Allez sur le site officiel pour récupérer l’exécutable d’installation et exécutez le sur votre poste de travail.

Définition du vocabulaire

Les différents états :

  • Untracked : Le fichier n’est pas pris en compte par Git
  • Unmodified : Le fichier a déjà était commit sur Git et n’a pas encore été modifié
  • Modified : Le fichier a déjà était commit sur Git et a été modifié
  • Staged : L’état actuel du fichier est pris en compte dans Git mais n’a pas été commit

Schéma : schema

Configuration de Git

Vous pourrez trouver plus d’information sur le site officiel.

Recupération de la liste des paramètres de configuration :

  • Tous les paramètres : $ git config --list
  • tous les paramètres globaux : $ git config --list --global
  • Tous les paramètres et leur origine : $ git config --list --show-origin

Définition des paramètre utilisateurs :

  • Le nom de l’utilisateur : $ git config --global user.name "user"
  • L’adresse mail de l’utilisateur : $ git config --global user.email "user@mail"

Définition des paramètres systèmes :

  • Pour ne pas modifier automatiquement le formatage des fins de ligne entre Windows (CRLF) et Linux (LF) : $ git config --global core.autocrlf false

Mise en place d’un dépôt Git (Github)

1/ Initialisation de Git dans un répertoire existant

Pour initialiser Git dans un nouveau répertoire : $ git init Pour faire le lien avec un dépôt distant : $ git remote add <remote_name> <remote_url>

2/ Clonage d’un dépot existant (exemple avec github) Pour récupérer un dépôt distant sur son espace de travail : $ git clone <url> <folder>

Gestion des fichiers avec Git

Vous trouverez ci-dessous une liste des opérations à connaitre pour pouvoir gérer les fichiers avec Git.

CommandeCommentaire
$ git statusAnalyse de l’état de l’ensemble des éléments
$ git status -sAnalyse de l’état de l’ensemble des éléments avec un affichage synthétique
$ git add <fichier ou pattern>Ajout ou prise en compte des modifications d’un fichier
$ git add -f <fichier ou pattern>Force l’ajout ou la prise en compte des modifications d’un fichier (gitignore)
$ git add -AAjout ou prise en compte des modifications de l’ensemble des fichiers
$ git commit -m "<message>"Enregistrement de l’ensemble des éléments se trouvant dans l’espace staged avec un message
$ git commit --amend"Ajout de l’ensemble des éléments se trouvant dans l’espace staged dans le commit précent
$ git rm <fichier ou pattern>Suppression d’un fichier dans le répertoire courant si il a déjà était commit
$ git rm --cached <fichier ou pattern>Suppression d’un fichier de l’espace staged mais pas du répertoire courant
$ git checkout -- <fichier ou pattern>Annulation des modifications d’un fichier non présent dans l’état staged

Gestion d’un dépôt distant

Vous trouverez ci-dessous une liste des opérations à connaitre pour pouvoir gérer un dépôt distant avec Git

CommandeCommentaire
$ git remote -vLister les dépôts distants
$ git remote add <remote_name> <remote_url>Ajout d’un dépôt distant
$ git fetch <remote_name>Récupération des métadonnées d’un dépôt distant
$ git chekout <remote_name>/<branch>Récupération de l’ensemble des éléments d’une branche d’un dépôt distant
$ git push <remote_name> <branhc>Envoi des nouveaux commit sur une branche d’un dépôt distant
$ git remote show <remote_name>Inspecter un dépôt distant
$ git remote rename <remote_name_old> <renomte_name_new>Modifier le nom local utiliser pour définir un dépôt distant
$ git remote remove <remote_name>Suppression d’un dépôt distant

Définition d’un fichier .gitignore

Il est possible d’ignorer certain fichiers/répertoires avec Git en utilisant un fichier .gitignore.

Exemple de contenu d’un fichier .gitignore

 1# ignore all .a files
 2*.a
 3
 4# ignore all .a or .o files
 5*.[oa]
 6
 7# ignore all files ending by ~
 8*~
 9
10# but do track lib.a, even though you're ignoring .a files above
11!lib.a
12
13# only ignore the TODO file in the current directory, not subdir/TODO
14/TODO
15
16# ignore all files in any directory named build
17build/
18
19# ignore doc/notes.txt, but not doc/server/arch.txt
20doc/*.txt
21
22# ignore all .pdf files in the doc/ directory and any of its subdirectories
23doc/**/*.pdf

Récupération des différences et de l’historique des changements

Quelques opérations possibles pour voir les différences entre les commit :

CommandeCommentaire
$ git diffDifférence entre le répertoire de travail et le dernier commit
$ git diff --cachedDifférence entre les fichiers ajouter pour le prochain commit et le dernier commit
$ git diff <commit_1> <commit_2> <pattern>Liste des différences entre deux commit pour l’ensemble des fichiers correspondants au pattern souhaité

Quelques opérations possibles pour lire l’historique des commit :

CommandeCommentaire
$ git logVoir l’historique des commit
$ git log -2Voir l’historique des deux derniers commit
$ git log -p -1Voir l’historique du dernier commit avec le détail des différences entre les commit
$ git log -stat -1Voir l’historique du dernier commit avec les statistiques sur les éléments
$ git log --pretty=format:"<format>"Voir l’historique des commit dans le format souhaité
$ git log --oneline --decorate"Exemple de commande …
$ git log --oneline --decorate --graph --all"Exemple de commande …

Exemple des options pouvant être utilisés comme format :

OptionDescription
%HCommit hash
%hAbbreviated commit hash
%TTree hash
%tAbbreviated tree hash
%PParent hashes
%pAbbreviated parent hashes
%anAuthor name
%aeAuthor email
%adAuthor date (format respects the –date=option)
%arAuthor date, relative
%cnCommitter name
%ceCommitter email
%cdCommitter date
%crCommitter date, relative
%sSubject

Gestion des tags

CommandeCommentaire
$ git tagLister les tags existants
$ git tag -l <pattern>Lister les tags correspondant à un pattern
$ git tag -a <tag> -m "<message>"Création d’un tag annoté
$ git tag <tag>Création d’un tag allégé
$ git tag -d <tag>Suppression d’un tag
$ git show <tag>Récupérer la decription d’un tag annoté
$ git tag -a <tag> <checksum>Création d’un tag sur un commit déja existant (checksum)
$ git push <remote> <tag>Enregistrer le tag sur le dépôt distant
$ git push <remote> --tagsEnregistrer l’ensemble des tags sur le dépôt distant
$ git push <remote> --delete <tag>Suppression d’un tag sur le dépôt distant
$ git checkout <tag>Récupération du contenu d’un tag dans une branch détachée
$ git checkout -b <branch> <tag>Récupération du contenu d’un tag dans une nouvelle branche

Gestion des alias

Vous pouvez définir des alias pour accéder aux commandes git plus rapidement.

1$ git config --global alias.co checkout
2$ git config --global alias.br branch
3$ git config --global alias.ci commit
4$ git config --global alias.st status
5$ git config --global alias.unstage 'reset HEAD --'
6$ git config --global alias.last 'log -1 HEAD'

Gestion des branches avec Git

CommandeCommentaire
$ git branchListe des branches
$ git branch -vListe des branches avec le dernier commit
$ git branch --mergedListe des branches fusionner avec la branche courante
$ git branch testCréation d’une nouvelle branche nommée test
$ git branch -d corf1Suppression de la branche corf1
$ git checkout masterChanger de branche (sur la branche master)
$ git checkout -b devf1Création de la branche devf1 et changement de branche sur devf1
$ git merge corf1Fusionner la branche corf1 sur la branche courante

Autres opérations

L’opération de rebase pour appliquer l’ensembler des modifications d’une branche en réécrivant l’historique : documentation.