日志中相对日期更紧凑?

时间:2014-07-30 16:29:41

标签: git

考虑这个自定义git日志输出,它使用--date=relative和格式字符串%ar作为作者日期,相对[1]:

* c44addf - (21 minutes ago) adding e on dev - Jonah (dev)
* 2506d90 - (22 minutes ago) adding d - Jonah
| * 310855e - (22 minutes ago) adding e - Jonah (HEAD, master)
|/  
* 7b47b37 - (31 minutes ago) 2nd commit on dev - Jonah
* db00522 - (30 minutes ago) master 2nd commit - Jonah
* c58c898 - (32 minutes ago) initial - Jonah

相对日期显示比需要的更详细。而不是:

(31 minutes ago)

我更愿意:

(31 m)

这可能吗?

[1]完整命令为log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h %C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all

1 个答案:

答案 0 :(得分:1)

我不认为有一种内置方式可以按照您要查找的方式输出自定义日期格式。

我检查了git日志文档,唯一可用的相对日期格式配置为提交者日期%cr和作者日期%ar,您已经使用后一种格式,以便不会工作。

但是你可以使用一些命令行魔术和一个简单的python脚本来完成工作。以下是我的表现方式:

python脚本名为prettyDate.py:

#!/usr/bin/python

import fileinput
import datetime
import sys

def prettydate(d):
    diff = datetime.datetime.utcnow() - d
    s = diff.seconds
    if diff.days > 7 or diff.days < 0:
        return d.strftime('%d %b %y')
    elif diff.days == 1:
        return '1 d'
    elif diff.days > 1:
        return '{} ds'.format(diff.days)
    elif s <= 1:
        return 'just now'
    elif s < 60:
        return '{} s'.format(s)
    elif s < 120:
        return '1 m'
    elif s < 3600:
        return '{} ms'.format(s/60)
    elif s < 7200:
        return '1 h'
    else:
        return '{} hs'.format(s/3600)

if __name__ == '__main__':

    for line in fileinput.input():
        lineSplit = line.split(' ')
        commit = lineSplit[0]
        timestamp = lineSplit[1]

        gitDt = datetime.datetime.utcfromtimestamp(int(timestamp))

        print commit + ' - (' + prettydate(gitDt) + ')'

输出日期的命令:

git log --format="%h %at" | python prettyDate.py

上面的git log语句将返回提交ID和Unix时间戳,该时间戳通过管道传递给python脚本进行格式化。可以将脚本调整为您喜欢的任何格式,如果您不希望每次都输入整个命令,则可以创建别名。

示例输出:

b82462e - (2 ms)
i81362f - (8 hs)
j85462g - (1 d)