Есть ли способ настроить вывод git blame? - PullRequest
46 голосов
/ 18 октября 2010

git log имеет замечательную опцию --format для указания способа форматирования вывода.

Но git blame, похоже, не имеет эквивалента, хотя вывод по умолчанию blame не совсем удобен для человека. Я хотел бы видеть намного меньше.

Например, вместо:

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;

Я хотел бы иметь:

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

Я полагаю, что мог бы написать скрипт для разбора вывода git blame --porcelain, но учитывая ужасные выходные данные по умолчанию blame Я чувствую, что кто-то там уже должен был что-то с этим сделать.

Есть идеи? Или какие-нибудь советы по реализации такого сценария?

Редактировать: Решить, написав маленький скрипт .

Ответы [ 4 ]

18 голосов
/ 18 октября 2010

Вы можете использовать альтернативный формат вывода: git annotate или git blame -c.

Вы можете изменить форматирование дат с помощью опции --date=<format> (или blame.date переменная конфигурации), где <format> - один относительный, локальный, по умолчанию, iso, rfc, короткий .См. git-blame и git-log man-страницы для подробностей.

7 голосов
/ 12 января 2012

Для меня флаг -s работает, потому что все, что мне нужно, это идентификатор SHA1, после которого я просматриваю коммит для деталей.Сценарий определенно кажется излишним.Возможно ли, что флаг -s был недоступен год назад?

6 голосов
/ 18 октября 2010

Обновление Git 2.18 (Q2 2018): "git blame" учит не выделять неинтересные метаданные исходной фиксации в строках, которые совпадают с предыдущей, а также окрашивает линии в разные цвета в зависимости от возраста фиксации..

См. коммит 0dc95a4 , коммит 25d5f52 , коммит cdc2d5f (24 апреля 2018) Стефан Беллер (stefanbeller).
(Объединено с Junio ​​C Hamano - gitster - in commit 3d24129 , 30 мая 2018 г.)

builtin/blame: добавить новую конфигурацию схемы окраски

Добавить параметр конфигурации, позволяющий выбрать цветовую схему по умолчанию для вины.Командная строка по-прежнему имеет приоритет над конфигурацией.

git config теперь сообщает:

blame.coloring::

Это определяет схему окраски, которая будетприменяется к выводу с обвинением.
Это может быть 'repeatedLines', 'highlightRecent' или 'none', который является значением по умолчанию.


встроенный/ blame: выделите недавно измененные строки

Выберите другой цвет для дат и имитируйте «понижение температуры» в зависимости от возраста.

Как и в предыдущем патче, предлагается опция командной строки '--color-by-age 'для включения этого режима и опция конфигурации' color.blame.highlightrecent 'для выбора цветов.

Документация теперь добавляет:

color.blame.highlightRecent

Это можно использовать для окраски метаданных линии обвинения в зависимости от возраста линии.

Для этого параметра должен быть задан разделенный запятыми список настроек цвета и даты, начиная и заканчивая цветом, даты должны быть установлены от самого старого до самого нового.
Метаданные будут окрашены с учетом цветацвета, если линия была введена до заданной метки времени, перезаписывая старые метки времени.

Вместо абсолютной метки времени работают и относительные метки времени, например, 2.weeks.ago действителен для обращения ко всему более старомучем 2 недели.

По умолчанию используется значение «blue,12 month ago,white,1 month ago,red», при котором все цвета старше одного года окрашены в синий цвет, последние изменения в возрасте от одного месяца до одного года остаются белыми, а строки вводятся в последнеммесяц окрашен в красный цвет.


builtin/blame: тусклые неинтересные строки метаданных

При использовании git-blame множество строк содержат избыточныенапример, в фрагментах, состоящих из нескольких строк, метаданные (имя коммита, автор, дата) повторяются.
Читатель может их не интересовать, поэтому предложите вариант окрасить информацию, которая повторяется изпредыдущая строка по-другому.
Традиционно, мы используем CYAN для строк, которые менее интересны, чем другие (например, заголовок куска), поэтому пойдем с этим.

Параметр командной строки '--color-lines' вызовет раскраскуповторяющихся линий, и опция конфигурации 'color.blame.colorLines' предназначена для выбора цвета.
Установка опции конфигурации не подразумевает, что повторяющиеся линии окрашены.


Оригиналответ 2010

Учитывая, что веб-интерфейс, такой как Trac или Redmine, интегрирует git blame результаты, я полагаю, что такой анализ уже выполнен.

Вы можете видеть в этом Redmine Defect 3832 Пример с этим сценарием ruby:

0 голосов
/ 31 октября 2018

Поскольку git log предоставляет гораздо больше опций настройки для вывода, вы можете комбинировать git blame, awk, xargs и git log для достижения того, что вы хотите.Например,

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

Это выводит что-то вроде этого:

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

В основном то, что git blame и awk делает выше, получает полный SHA коммита, а xargs передает егоgit log в качестве аргумента.

...