60 votes

Formatage des tableaux du journal Git

J'ai un alias simple pour afficher quelques derniers commits :

log --pretty=format:'%h %an %s' -10

Comment puis-je faire en sorte que les résultats soient affichés en colonnes, comme ceci :

898e8789 Author1             Commit message here
803e8759 Other Author name   Commit message here

0 votes

S'il existe un utilitaire Unix pour faire cela, j'aimerais bien le connaître ! La meilleure chose à laquelle je puisse penser est une sortie formatée en Perl, ce qui est pénible.

3 votes

@Zack : la colonne d'homme est ton ami.

0 votes

Il semble que ce soit un BSDisme, malheureusement.

83voto

Brian Campbell Points 101107

Dans Git 1.8.3 et les versions ultérieures, il y a un support natif pour cela dans le fichier joli format à l'aide de l'outil %<(_N_) pour formater le caractère de remplacement suivant comme suit N colonnes de large :

$ git log --pretty=format:'%h %<(20)%an %s' -10

Pour les versions antérieures à 1.8.3, la version précédente de cette réponse, retenue ci-dessous, devrait fonctionner.

Voici une solution en Bash utilisant read pour analyser les lignes du journal, et printf pour les imprimer, avec un champ de largeur fixe pour le nom des auteurs afin que les colonnes restent alignées. Il suppose que | n'apparaîtra jamais dans le nom de l'auteur ; vous pouvez choisir un autre délimiteur si vous pensez que cela pourrait poser un problème.

git log --pretty=format:'%h|%an|%s' -10 | 
  while IFS='|' read hash author message
  do 
    printf '%s %-20s %s\n' "$hash" "$author" "$message"
  done

Vous pouvez le créer en tant qu'alias en utilisant :

[alias]
    mylog = "!git log --pretty=format:'%h|%an|%s' -10 | while IFS='|' read hash author message; do printf '%s %-20s %s\n' \"$hash\" \"$author\" \"$message\"; done"

Je suis sûr que vous pourriez faire cela en moins de caractères en utilisant awk mais comme le dicton va,

Lorsqu'ils sont confrontés à un problème, certains se disent "Utilisons AWK". Or, ils ont deux problèmes.

Bien sûr, cela étant dit, j'ai dû trouver un moyen de le faire en awk qui est un peu plus courte :

git ... | awk -F '|' '{ printf "%s %-20s %s\n", $1, $2, $3 }'

41voto

Jesse Points 633

Vous pouvez aussi le faire :

git log --pretty=format:'%h %<(20)%an %s' -10

Pas besoin de magie de la coquille ou de post-traitement avec awk , column etc.

0 votes

Cette solution me semble de loin la meilleure. Où avez-vous trouvé des documents sur la syntaxe %<(20) ?

1 votes

Il est référencé dans le git help log sous la section PRETTY FORMATS (j'utilise la version 1.8.3.4 de git).

0 votes

C'est la réponse la plus courte et la plus précise. Vous n'avez besoin de rien d'autre, juste d'un journal git intégré.

18voto

ecerulm Points 1834

La commande suivante permet d'imprimer le journal sous forme de tableau

git log --pretty=format:'%h|%an|%s' -10 | column -t -s '|'

les colonne colonne" la sortie, en utilisant le "|" comme séparateur de champs, elle trouvera la largeur de colonne optimale en fonction de l'entrée, donc elle fonctionnera bien même si vous avez plus de champs.

Sous Linux, cela fonctionnera correctement tant que vous n'utiliserez pas de couleurs, l'implémentation Linux ne gère pas bien la fonction Codes d'échappement ANSI .

Mais sous Mac OS X, il gère les couleurs et vous pouvez utiliser n'importe quel caractère unicode comme délimiteur de champ. J'utilise ∑ car je suis presque sûr qu'il n'apparaîtra pas par hasard dans le texte du commit. | est un mauvais choix parce qu'il pourrait apparaître dans la description du commit et aussi si vous utilisez --graph --decorate --all il apparaîtra comme faisant partie des symboles utilisés pour dessiner le graphique

14voto

insysion Points 250

Pour obtenir un format véritablement tabulaire, vous devez également tronquer les noms d'utilisateur qui dépassent par exemple 20 caractères :

git log --pretty=format:'%h %<(20,trunc)%an %s' -10

En outre, si vous envoyez des données au terminal, vous pouvez éviter les débordements de ligne en tronquant le champ du message de validation :

git log --pretty=format:'%h %<(20,trunc)%an %<(39,trunc)%s' -10

ou en enveloppant les lignes et en indentant les lignes qui débordent pour les aligner :

git log --pretty=format:'%w(79, 0, 29)%h %<(20,trunc)%an %s' -10

EDIT : L'exemple ci-dessus codifie en dur la largeur du terminal à 79 caractères. Sur les systèmes POSIX, vous pouvez utiliser tput cols pour obtenir la largeur :

git log --pretty=format:'%w(`tput cols`, 0, 29)%h %<(20,trunc)%an %s' -10

ou

git log --pretty=format:'%w($((`tput cols`-1)), 0, 29)%h %<(20,trunc)%an %s' -10

Malheureusement, ces deux dernières ruptures git alias il faudra donc un alias de terminal (à moins que vous n'aimiez vraiment taper au clavier).

7voto

un5t0ppab13 Points 55

Comment ajouter un onglet ?

Ce que vous recherchez, c'est

%x09

En voici un exemple

git log --pretty=format:"%C(magenta)%h %C(cyan)%C(bold)%ad%Creset %C(cyan)%cr%Creset%x09 | %s %C(green)%Creset" --date=short

Je voulais que la date relative soit tabulée parce qu'elle n'était pas de longueur fixe, de cette façon toutes les colonnes s'alignent (pour tout ce qui date de moins d'un an). J'aurais voulu qu'elle soit toujours alignée, mais je n'ai pas pu aller plus loin avant de manquer de temps (ironiquement).

J'espère que cela vous aidera !

Si vous avez des suggestions pour améliorer cette réponse pour le cas de l'année relative (pas seulement pour la recherche de l'année), n'hésitez pas à les entendre, et à éditer cette réponse pour les ajouter si vous savez comment le faire.

Editer :

J'ai décidé d'essayer le %<(n) la syntaxe suggérée par une autre personne aussi, j'ai trouvé que c'est trop court si vous avez quelque chose de plus de 9 ans parce que 10 ans c'est un chiffre de plus à utiliser. %<(20) ce qui a été suggéré. Au lieu de cela, je propose %<(23)

git log --pretty=format:"%C(magenta) %h %C(cyan)%C(bold)%ad%Creset %<(23) %C(cyan)%cr%Creset %s%C(green)%Creset" --date=short`

À moins que le projet n'ait plus de 100 ans, il s'alignera parfaitement. Mais si vous voulez qu'il fonctionne pour cela, il suffit d'ajouter 1, ce qui le rend %<(24)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X