2013-03-04 138 views
4

我有一个git的日志别名这样git的日志格式

log --graph --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %ci %an - %s'' 

生产

* 123456 2013-03-01 09:45:11 +0100 Name Surname - commit message 1 
* 123457 2013-03-01 09:45:11 +0100 Name LongerSurname - commit message 2 
* 123458 2013-03-01 09:45:11 +0100 Name Sho - commit message 3 

我想获得一个不同的格式,即

* 123456 2013-03-01 09:45:11 Name Surname - commit message 1 
* 123457 2013-03-01 09:45:11 Name LongerS - commit message 2 
* 123458 2013-03-01 09:45:11 Name Sho  - commit message 3 

通知更好地控制iso8601如何缺少GMT + 1规范,以及为了保持日志消息对齐而填充名称和短名称的时间长度。

是否可以用普通的git log做到这一点?如果不是,实现它的最好方法是什么?

+1

你检查http://stackoverflow.com/q/7853332/11343? – CharlesB 2013-03-04 15:20:34

+1

只是一个侧面说明。你确实意识到'--graph'会在有不同的分支时破坏对齐,对吗?也有标签有这个效果。和指针(例如'HEAD') – Shahbaz 2013-03-04 17:33:28

+0

@Shahbaz:我使用非常线性的历史,所以情况很少。无论如何,如果有必要,我已准备好放下图表。 – 2013-03-04 20:55:40

回答

4

您可以使用ANSI转义码来移动光标。你也必须调整你的寻呼机设置。是

export LESS+=' -r' # Make sure your pager will accept ANSI escape codes 
git log --graph \ 
    --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %ci %x1b[s%an%x1b[u%x1b[3C - %s' 

使用的转义码如下:

  1. %X1B [S - 保存当前光标位置
  2. %X1B [C - 恢复光标位置,即,将光标移动到其中它是当你使用%X1B [秒
  3. %X1B [3C - 向前移动光标3个位置(可以更改数量以匹配wnat显示的字符数

使用这些转义字符重新定位光标后,以下文本将覆盖作者名称的尾部,并提供所需的效果。

至于日期,检查出链接的评论:How to change git log date formats

+0

我很惊讶git不支持C的'printf'中的标志,宽度和精度。顺便说一句,如果'%an'非常长,'%s'很短,你会在提交消息后看到名字的其余部分吗?你可以通过清除'%s'后面的其余部分来清理它吗? – Shahbaz 2013-03-04 17:40:25

+0

尽管如此,但它可能会提醒您提交的消息不太好:)但是,请尝试在“%s”之后添加“%x1bK”。我认为这应该从当前光标位置清除到行尾。 – chepner 2013-03-04 18:37:08

+0

不是它会发生在我身上,但我只是说过,因为你知道,作为一个程序员,你习惯于发现错误;) – Shahbaz 2013-03-05 09:07:31