4

如何使用 git log 指定最大字段长度?我希望输出列对齐。

4

2 回答 2

8

您可以在完全不使用任何外部工具的情况下指定列宽:

git log --format="%<(25,trunc)%ad | %<(25,trunc)%s | %<(25,trunc)%an"

还有很多其他选项,例如

%<|(25)

将输出与列对齐。您可以将列格式化为左边界、右边界甚至居中等:https ://git-scm.com/docs/pretty-formats

不幸的是,我不知道它何时被添加到 git,我在 Windows 上使用 2.10.1...</p>

于 2016-10-25T12:18:56.473 回答
0

如果您在 Windows 中,则可以使用 PowerShell 脚本。在输出之间使用特殊字符格式化日志,从中创建一个对象并通过管道输入Format-Table,您可以在其中指定Width

git log --format="%ad|%s|%an" | ForEach-Object {
  New-Object PSObject -Property @{
    Time = $_.Split('|')[0]
    Message = $_.Split('|')[1]
    Author = $_.Split('|')[2]
  }
} | Format-Table -Property @{Expression={$_.Time};width=25;Label="Author date"}, 
                           @{Expression={$_.Message};Width=25;Label="Commit message"}, 
                           @{Expression={$_.Author};Width=11;Label="Author name"}

样本输出:

Author date               Commit message            Author name
-----------               --------------            -----------
Sun Jun 16 12:49:03 20... added rand content 60 ... Bonke
Sun Jun 16 12:46:56 20... added rand content 61 ... Bonke
Sun Jun 16 12:46:37 20... change                    Bonke
Wed Apr 24 22:41:44 20... added rand content 17 ... Klas Mel...
Wed Apr 24 22:40:16 20... added rand content 8 t... Klas Mel...

如果您想在 bash 中执行此操作,这里是 bash 中的类似脚本(灵感来自Git log tabular formatting的答案):

git log --pretty=format:'%ad|%s|%an' | 
  while IFS='|' read time message author
  do 
    printf '%.25s %.25s %.11s\n' "$time" "$message" "$author"
  done

样本输出

Sun Jun 16 12:49:03 2013  added rand content 60 to  Bonke
Sun Jun 16 12:46:56 2013  added rand content 61 to  Bonke
Sun Jun 16 12:46:37 2013  change                    Bonke
Wed Apr 24 22:41:44 2013  added rand content 17 to  Klas Mellbo
Wed Apr 24 22:40:16 2013  added rand content 8 to . Klas Mellbo
于 2013-06-17T19:53:29.667 回答