{{tag>git log historique}}
:TODO_DOCUPDATE:
====== Historique git ======
Git est un gestionnaire de révision ou **CVS**((Control Revision System)), 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
{{git_log_graph_02.png}}
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 [[dev:git:alias|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 =====
* Pro Git, seconde édition, Scott Chacon et Ben Straub
* http://stackoverflow.com/questions/1057564/pretty-git-branch-graphs
* [[https://stackoverflow.com/questions/56621554/how-do-i-show-tags-in-a-custom-git-log-format|Comment afficher les références dans un formatage personnalisé (stackoverflow)]]
* [[https://stackoverflow.com/questions/15458237/git-pretty-format-colors|Couleurs avec git pretty format (stackoverflow)]]