Outils pour utilisateurs

Outils du site


dev:git:git_log_gestion_historique

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
dev:git:git_log_gestion_historique [2023/09/19 07:43] – supprimée - modification externe (Date inconnue) 127.0.0.1dev:git:git_log_gestion_historique [2023/09/19 10:37] (Version actuelle) yoann
Ligne 1: Ligne 1:
 +{{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.
 +
 +<code bash>
 +
 +</code>
 +
 +Pour les terminaux supportant les couleurs 24 bits les couleurs peuvent être décrites par les valeurs hexadécimales des composantes RVB:
 +
 +<code bash>
 +# 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
 +</code>
 +
 +{{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 :
 +
 +<code bash>
 +git --no-pager log --pretty=format:"%C(auto)%h%d - %s %C(#808080)[%ad] %Creset" --graph --all --date=format:"%d/%m/%y %H:%M"
 +</code>
 +
 +
 +<note>
 +On peut [[dev:git:alias|créer un alias]] pour utiliser facilement cette définition .
 +</note>
 +
 +
 +
 +===== Filtrer la sortie =====
 +
 +Pour limiter la sortie aux **n** derniers commit insérer **-n**:
 +<code bash>
 +$ git log --oneline --stat -2
 +</code>
 +
 +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:
 +
 +<code bash>
 +$ git log --since=2.weeks
 +</code>
 +
 +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":
 +
 +<code bash>
 +git log -Sexemple
 +</code>
 +
 +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 %%**--**%%:
 +
 +<code bash>
 +$ git log --oneline --name-status -- lib/
 +</code>
 +
 +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:
 +
 +<file>
 +[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
 +</file>
 +
 +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)]]