web-dev-qa-db-fra.com

Existe-t-il un moyen de personnaliser le rendu du blâme git?

git log a une option Nice --format pour spécifier le formatage de la sortie.

Mais git blame ne semble pas avoir d’équivalent, bien que la sortie par défaut de blame ne soit pas tout à fait conviviale. J'aimerais voir beaucoup moins.

Par exemple, au lieu de:

5600cab7 js/sidebar/VehicleGrid.js        (Rene Saarsoo    2009-10-08 18:55:24 +0000 127)    if (x > y) {
b5f1040c js/map/monitoring/VehicleGrid.js (Mihkel Muhkel   2010-05-31 07:20:13 +0000 128)        return x;

Je voudrais avoir:

5600cab7 Rene Saarsoo (1 year ago)     127:    if (x > y) {
b5f1040c Mihkel Muhkel (5 months ago)  128:        return x;

Je suppose que je pourrais écrire un script pour analyser la sortie de git blame --porcelain, mais étant donné la sortie par défaut épouvantable de blame, j’ai le sentiment que quelqu'un doit déjà avoir fait quelque chose à ce sujet.

Des idées? Ou des conseils pour mettre en œuvre un tel script?

Edit: Résolu en écrivant petit script .

44
Rene Saarsoo

Vous pouvez utiliser un autre format de sortie: git annotate ou git blame -c.

Vous pouvez modifier le formatage des dates avec l'option --date=<format> (ou la variable de configuration blame.date), où <format> est l'un des relatif, local, par défaut, iso, rfc, short . Voir git-blame et git-log pages de manuel pour plus de détails.

18
Jakub Narębski

Mise à jour de Git 2.18 (T2 2018): "git blame" apprend à ne pas mettre en évidence les métadonnées sans intérêt de la validation d'origine sur des lignes identiques à la précédente, ainsi que les lignes Paint de couleurs différentes en fonction de l'âge du commit.

Voir commit 0dc95a4 _, commit 25d5f52 , commit cdc2d5f (24 avril 2018) de Stefan Beller (stefanbeller) .
(Fusionnée par Junio ​​C Hamano - gitster - à commit 3d24129 , 30 mai 2018)

builtin/blame: ajouter une nouvelle configuration de schéma de couleur

Ajoutez une option de configuration qui permet de sélectionner le jeu de couleurs par défaut pour le responsable. La ligne de commande a toujours la priorité sur la configuration.

git config rapporte maintenant:

blame.coloring::

Cela détermine le schéma de couleur à appliquer à la sortie de la faute.
Cela peut être 'repeatedLines', 'highlightRecent' ou 'none' qui est la valeur par défaut.


builtin/blame: met en évidence les lignes récemment modifiées

Choisissez une couleur différente pour les dates et imitez le «refroidissement» en fonction de l'âge.

Comme pour le patch précédent, cela offre l'option de ligne de commande '--color-by-age' pour activer ce mode et l'option de configuration 'color.blame.highlightrecent' pour sélectionner les couleurs.

La documentation ajoute maintenant:

color.blame.highlightRecent

Cela peut être utilisé pour colorer les métadonnées d'une ligne incriminée en fonction de son âge.

Ce paramètre doit être défini sur une liste de paramètres de couleur et de date séparés par des virgules, commençant et se terminant par une couleur. Les dates doivent être définies du plus ancien au plus récent.
Les métadonnées seront colorées en fonction des couleurs si la ligne a été introduite avant l’horodatage donné, écrasant ainsi les couleurs plus anciennes horodatées.

Au lieu d’un horodatage absolu, les horodatages relatifs fonctionnent également, par ex. 2.weeks.ago est valable pour tout ce qui est âgé de plus de 2 semaines.

La valeur par défaut est 'blue,12 month ago,white,1 month ago,red', qui colore tout ce qui date de plus d'un an en bleu, les modifications récentes entre un mois et un an sont conservées en blanc et les lignes introduites au cours du dernier mois sont en rouge.


builtin/blame: atténuer les lignes de métadonnées sans intérêt

Lorsque vous utilisez git-blame, de nombreuses lignes contiennent des informations redondantes. Par exemple, dans les segments composés de plusieurs lignes, les métadonnées (nom de validation, auteur, date) sont répétées.
Un lecteur peut ne pas être intéressé par ceux-ci, alors offrez une option pour colorer différemment les informations répétées à partir de la ligne précédente.
Traditionnellement, nous utilisons CYAN pour les lignes moins intéressantes que d’autres (par exemple, en-tête de morceau), alors allez-y.

L'option de ligne de commande '--color-lines' déclenchera la coloration des lignes répétées et l'option de configuration 'color.blame.colorLines' est fournie pour sélectionner la couleur.
La définition de l'option de configuration ne signifie pas que les lignes répétées sont colorées.


Réponse originale 2010

Étant donné que l’interface Web telle que Trac ou Redmine intègre les résultats git blame, je suppose qu’une telle analyse a déjà été effectuée.

Vous pouvez voir dans ce Redmine Defect 3832 un exemple avec ce script Ruby:

6
VonC

Pour moi, l'option -s fonctionne, car tout ce dont j'ai besoin est l'ID SHA1, après quoi je consulte le commit pour plus de détails. Un script semble définitivement exagéré. Est-il possible que le drapeau -s ne soit pas disponible il y a un an?

6
Gdalya

Étant donné que git log fournit beaucoup plus d'options de personnalisation pour la sortie, vous pouvez combiner git blame, awk, xargs et git log pour obtenir ce que vous voulez. Par exemple.

git --no-pager blame <filepath> -L1,+1 --porcelain | awk 'NR==1 {print $1}' | xargs git --no-pager log -1 --pretty=format:"%h - (%cd) %s - %an" --date=relative

Cela génère quelque chose comme ceci:

f8a66e80c - (5 months ago) Add gem: devise - elquimista

En gros, ce que git blame et awk font ci-dessus consiste à obtenir un SHA de validation complet, et xargs le transmet à git log en tant qu'argument.

0
elquimista