Outils pour utilisateurs

Outils du site


dev:git:git_log_gestion_historique

:TODO_DOCUPDATE:

Historique git

Git est un gestionnaire de révision ou CVS1), son principal objectif est de conserver l'historique des modifications apportées à un projet. C'est en consultant cet historique qu'on sera en mesure par exemple :

  • De savoir qui à contribuer à quoi ;
  • De déterminer où des bugs ont été introduits ;
  • D' annuler des modifications problématiques etc.

La principale commande permettant de consulter l'historique d'un projet git est la commande git log.

Les arguments (ou options) disponibles pour la commande git log se répartissent en deux catégories :

  • La mise en forme des enregistrements ou formatage de l'affichage ;
  • Le filtrage des enregistrements.

Quelques options largement utilisées:

--name-status affiche pour chaque commit le nom des fichiers modifiés.
--oneline Affiche sur une seule ligne lesi nformations essentielles du commit.
--decorate Affiche les références(pointeurs tags et branches).
-p Affiche le patch appliqué par chaque commit.
--stat Affiche pour chaque fichier modifié les statistiques.
--graph Souvent utilisé avec --oneline pour visualiser le graph des branches.

Formater la sortie

L'option --pretty permet de choisir une mise en forme parmi celles disponibles. On peut toutefois précisément décrire le format de la sortie avec la syntaxe --pretty=format:"fstring" où fstring est une chaine de type printf():

%H SHA-1, Condensat complet du commit
%h SHA-1, condensat abrégé du commit
%T SHA-1, condensat de l'arborescence
%t SHA-1, condensat abrégé de l'arborescence
%P SHA-1, Condensat complet des parents
%p SHA-1, Condensat abrégé des parents
%an Nom de l'auteur
%ae email de l'auteur
%ad Date renseignée par l'auteur (au format spécifiée par l'option --date=)
%ar Date relative de l'auteur
%cn Nom du validateur
%ce Mail du validateur
%cd Date du validateur
%cr Date relative du validateur
%s Sujet du commit

Le formatage peut également définir des couleurs parmi les couleurs standard : normal, black, red, green, yellow, blue, magenta, cyan et white.

 

Pour les terminaux supportant les couleurs 24 bits les couleurs peuvent être décrites par les valeurs hexadécimales des composantes RVB:

# Utilise un gris %C(#808080) pour le formatage de la date
git --no-pager log --pretty=format:"%C(auto)%h%d - %s %C(#808080)[%ad] %Creset" --graph --all

Ci dessous un exemple d'affichage en graphe avec affichage personnalisé intégrant des couleurs et une mise en forme de la date :

git --no-pager log --pretty=format:"%C(auto)%h%d - %s %C(#808080)[%ad] %Creset" --graph --all --date=format:"%d/%m/%y %H:%M"
On peut créer un alias pour utiliser facilement cette définition .

Filtrer la sortie

Pour limiter la sortie aux n derniers commit insérer -n:

$ git log --oneline --stat -2

Ici les titres des deux derniers commits seront affichés avec les statistiques des fichiers modifiés.

Il est également possible de limiter l'historique retourné sur des critères temporels. Pour n'afficher que les commits émis depuis 2 semaines:

$ git log --since=2.weeks

On peut également choisir de n'afficher les commits d'un auteur en spécifiant le filtre --author

Rechercher des modifications

Si l'on souhaite afficher les commits ayant introduit des modifications contenant la chaîne de caractères “exemple”:

git log -Sexemple

La commande ci-dessus retournera les commits comportant des patchs ayant introduits ou retirés la chaîne “exemple”.

On peut placer en dernière option de git log est un chemin (fichier ou répertoire). Cette option est précédée d'un séparateur double tirets **--**:

$ git log --oneline --name-status -- lib/

La commande ci-dessus n'affichera que les commits ayant introduits des changements sur le dossier lib

Mise en forme de l'historique

Ci dessous un alias à ajouter dans le fichier de configuration ~/.gitconfig pour modifier la mise en forme de l'historique par défaut:

[alias]
    lg = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all

Cette mise en forme présente un graph avec l'ensemble des branches et affiche les références.

Images et graphes

  • gitk
  • Sourcetree

Références

1)
Control Revision System
dev/git/git_log_gestion_historique.txt · Dernière modification : 2023/09/19 10:37 de yoann