Git log табличное форматирование - PullRequest
37 голосов
/ 03 сентября 2010

У меня есть простой псевдоним для отображения нескольких последних коммитов:

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

Как сделать так, чтобы результаты отображались в столбцах, например:

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

Ответы [ 5 ]

52 голосов
/ 03 сентября 2010

В Git 1.8.3 и более поздних версиях это поддерживается в формате pretty , использующем синтаксис %<(<i>N</i>) для форматирования следующего заполнителя в виде N столбцов:

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

Для версий до 1.8.3 предыдущая версия этого ответа, приведенная ниже, должна работать.

Вот решение в Bash с использованием read для анализа строк журнала назадкроме printf, чтобы распечатать их, с полем фиксированной ширины для имени авторов, чтобы столбцы оставались выровненными.Предполагается, что | никогда не появится в имени автора;Вы можете выбрать другой разделитель, если считаете, что это может быть проблемой.

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

Вы можете создать это как псевдоним, используя:

[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"

Я уверен, что вы могли бы сделать это вменьше символов, использующих awk, но как звучит поговорка :

Когда люди сталкиваются с проблемой, некоторые говорят: «Давайте использовать AWK». Теперь у них две проблемы.

Конечно, сказав это, я должен был выяснить, как это сделать в awk, что немного короче:

git ... | awk -F '|' '{ printf "%s %-20s %s\n", $1, $2, $3 }'
35 голосов
/ 26 ноября 2013

Вы также можете сделать:

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

Нет необходимости в магии оболочки или последующей обработке awk, column и т. Д.

15 голосов
/ 01 августа 2013

Следующая команда напечатает журнал в табличной форме

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

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

В Linux все будет работать нормально, если вы не используете цвета, реализация Linux плохо обрабатывает управляющие коды ANSI .

Но в Mac OS X он будет обрабатывать цвета, и вы можете использовать любой символ Юникода в качестве разделителя полей.Я использую ∑, так как я почти уверен, что это не произойдет случайно в тексте коммита.| - неправильный выбор, поскольку он может появиться в описании фиксации, а также, если вы используете --graph --decorate --all, он будет отображаться как часть символов, используемых для рисования графика

10 голосов
/ 31 августа 2016

Чтобы получить по-настоящему табличный формат, вам также нужно укоротить имена пользователей длиннее, например, до 20 символов:

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

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

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

или переноса строк и выравнивания любых переполняющих строк для выравнивания:

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

РЕДАКТИРОВАТЬ: В приведенном выше примере жестко заданы значения ширины терминалабыть 79 символов.В системах POSIX вы можете использовать tput cols, чтобы возвратить ширину:

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

или

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

К сожалению, эти два последних разрыва git alias, поэтому потребуется псевдоним терминала (если толькоВы действительно любите печатать).

0 голосов
/ 20 апреля 2018

Проблема с табличным форматом заключается в том, что вам может не хватить места ...

Следующий мой личный лучший компромисс между необходимыми вещами для отображения:

  • кто
  • сделал, что
  • и когда
  • , чтобы иметь возможность копать больше по хешу коммита для how

, так:

  git log --pretty --format='%h %aI %<(15)%an ::: %s'

или

 git log --pretty --format='%h %cI %<(15)%an ::: %s'

, если вы хотите получить время коммитера, а не время автора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...