Как сделать git log cut длинными комментариями?

У меня есть псевдоним журнала git, который печатает каждую фиксацию как одну строку. Поскольку некоторые люди пишут слишком длинные однострочные записи в журнале фиксации, многие коммиты переносят на новую строку. Как я могу отформатировать вывод журнала git, чтобы вырезать комментарий после 50 символов?

Я нашел это в man-странице git -log, но он будет обрабатывать только короткие комментарии, а не сокращать длинные.

%<(<N>[,trunc|ltrunc|mtrunc]): make the next placeholder take at least N columns,
  padding spaces on the right if necessary. Optionally truncate at the beginning (ltrunc),
  the middle (mtrunc) or the end (trunc) if the output is longer than N columns. Note that
  truncating only works correctly with N >= 2.

Ответы

Ответ 1

В документации не так ясно, какие символы нужны, но следующий пример сокращает строку темы до 50 символов:

git log --oneline --format="%h %<(50,trunc)%s"

Спецификация формата %<, и аргументы для этого должны быть в круглых скобках. В этом случае 50 символов и усечение избытка.

Например, выполнение этого в репозитории msysGit дает:

C:\src\msysgit>git log -n 5 --format="%h [%<(12,trunc)%aN] [%<(12,trunc)%cN] %<(50,trunc)%s"

218ed04 [Sebastian ..] [Sebastian ..] Merge pull request #154 from csware/tortoisegitp..
8a920b9 [Sven Stric..] [Sven Stric..] Installer: Detect TortoiseGitPlink from Tortoise..
448e125 [dscho       ] [dscho       ] Merge pull request #152 from csware/syscommand
db8d1bf [Sven Stric..] [Sven Stric..] Perl readline creates empty sys$command files if..
753d3d6 [Johannes S..] [Johannes S..] Git for Windows 1.8.5.2-preview20131230

Ответ 2

Поздно к вечеринке, но эти опции также сделают это:

$ git config --global core.pager 'less -S'

или (например)

$ echo $LESS
-R
$ export LESS=-RS

Ответ 3

git log --oneline

Покажет разделенные команды фиксации (с кодами)

git log --pretty=oneline

Покажет вам полные фиксации (имеет коды)

Ответ 4

(Кажется, я полностью не могу отформатировать комментарий соответствующим образом, поэтому разместил это как ответ, но на самом деле это комментарий к ответу @patthoyts.)

Какая симпатия к trunc заключается в том, что она колотит, поэтому вы можете использовать ее так:
git log --pretty=format:"%ad %<(50,trunc)%s %h" --date=short --reverse
чтобы получить более легкий (по крайней мере для моих глаз) обзор.

$ git log --pretty=format:"%ad %<(50,trunc)%s %h" --date=short --reverse
2015-06-15 initial commit 5099ede 2015-06-16 Layout - Responsive grid added. 6534242 2015-06-17 HTML - H1 / Title updated <title>Testpage</title.. 88ea464 2015-06-18 Updating the Hotfix changes a8fbc47

Tip - добавьте alias, скажем, trunc, чтобы сделать его легким. git config --global alias.trunc 'log --pretty=format:"%ad %<(50,trunc)%s %h" --date=short --reverse'

Ответ 5

Попробуйте следующее:

git log --pretty=oneline

Надеюсь, это поможет.

Ответ 6

Я поместил это в ~/bin/git-mylog:

#!/bin/bash
COLS=$(tput cols)
git log --format="tformat:%>|(15)%C(auto)%h %Cgreen %<(20,trunc)%cn %C(auto) %<(15,trunc)%ar %<($((COLS-55)),trunc)%s" --graph

Здесь что-то происходит, но главное - использовать tput cols чтобы получить ширину терминала, а затем сделать некоторую арифметику, чтобы обрезать ширину комментария до фактического доступного пространства, а не до фиксированной ширины.