我试图在Git中显示最后一次提交,但我需要特殊格式的日期。
我知道log pretty格式%ad尊重——date格式,但我能找到的唯一——date格式是“short”。我想知道其他的,以及我是否可以创建一个自定义的,如:
git -n 1 --date=**YYMMDDHHmm** --pretty=format:"Last committed item in this release was by %%an, %%aD, message: %%s(%%h)[%%d]"
我试图在Git中显示最后一次提交,但我需要特殊格式的日期。
我知道log pretty格式%ad尊重——date格式,但我能找到的唯一——date格式是“short”。我想知道其他的,以及我是否可以创建一个自定义的,如:
git -n 1 --date=**YYMMDDHHmm** --pretty=format:"Last committed item in this release was by %%an, %%aD, message: %%s(%%h)[%%d]"
当前回答
Git 2.7 (Q4 2015)将引入-local作为一条指令。 这意味着,除了:
--date=(relative|local|default|iso|iso-strict|rfc|short|raw)
你还会有:
--date=(default-local|iso-local|iso-strict-local|rfc-local|short-local)
-local后缀不能与raw或relative一起使用。参考。
您现在可以使用本地时区请求任何日期格式。 看到
提交99264 e9, 提交db7bae2, 提交dc6d782, 提交f3c1ba5, 提交f95cecf, 提交4 b1c5e1, 提交8 f50d26, 提交78 a8441, 提交2df4e29(2015年9月03日)由John Keeping (johnkeeping)。
参见commit add00ba, commit 547ed71 (03 Sep 2015) by Jeff King (peff)。 (由Junio C Hamano—gitster—在commit 7b09c45中合并,2015年10月5日)
特别地,上面的最后一个(commit add00ba)提到:
date: make "local" orthogonal to date format: Most of our "--date" modes are about the format of the date: which items we show and in what order. But "--date=local" is a bit of an oddball. It means "show the date in the normal format, but using the local timezone". The timezone we use is orthogonal to the actual format, and there is no reason we could not have "localized iso8601", etc. This patch adds a "local" boolean field to "struct date_mode", and drops the DATE_LOCAL element from the date_mode_type enum (it's now just DATE_NORMAL plus local=1). The new feature is accessible to users by adding "-local" to any date mode (e.g., "iso-local"), and we retain "local" as an alias for "default-local" for backwards compatibility.
其他回答
其他的是(来自git帮助日志):
--date=(relative|local|default|iso|rfc|short|raw)
Only takes effect for dates shown in human-readable format,
such as when using "--pretty". log.date config variable
sets a default value for log command’s --date option.
--date=relative shows dates relative to the current time, e.g. "2 hours ago".
--date=local shows timestamps in user’s local timezone.
--date=iso (or --date=iso8601) shows timestamps in ISO 8601 format.
--date=rfc (or --date=rfc2822) shows timestamps in RFC 2822 format,
often found in E-mail messages.
--date=short shows only date but not time, in YYYY-MM-DD format.
--date=raw shows the date in the internal raw git format %s %z format.
--date=default shows timestamps in the original timezone
(either committer’s or author’s).
据我所知,没有内置的方法来创建自定义格式,但您可以使用一些shell魔法。
timestamp=`git log -n1 --format="%at"`
my_date=`perl -e "print scalar localtime ($timestamp)"`
git log -n1 --pretty=format:"Blah-blah $my_date"
这里的第一步为您提供一个毫秒时间戳。您可以随心所欲地更改第二行以格式化时间戳。这个示例为您提供了类似于——date=local的内容,其中有一个填充的日期。
如果你想要永久的效果,而不是每次都输入这个,试试吧
git config log.date iso
或者,影响你所有的git使用此帐户
git config --global log.date iso
git log -n1 --format="Last committed item in this release was by %an, `git log -n1 --format=%at | awk '{print strftime("%y%m%d%H%M",$1)}'`, message: %s (%h) [%d]"
使用Bash和date命令将类似iso的格式转换为您想要的格式。我想要一个组织模式的日期格式(和列表项),所以我这样做了:
echo + [$(date -d "$(git log --pretty=format:%ai -1)" +"%Y-%m-%d %a %H:%M")] \
$(git log --pretty=format:"%h %s" --abbrev=12 -1)
结果是,例如:
+ [2015-09-13 Sun 22:44] 2b0ad02e6cec Merge pull request #72 from 3b/bug-1474631
在花了很长时间寻找一种方法来让git日志以YYYY-MM-DD格式输出日期,以一种更少的方式工作后,我想出了以下格式:
%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08
随着开关——date=iso。
这将以ISO格式(长格式)打印日期,然后打印14倍的退格字符(0x08),在我的终端中,这将有效地删除YYYY-MM-DD部分之后的所有内容。例如:
git log --date=iso --pretty=format:'%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%aN %s'
这将给出如下内容:
2013-05-24 bruno This is the message of the latest commit.
2013-05-22 bruno This is an older commit.
...
我所做的是在上面的格式上做了一些调整,创建了一个名为l的别名。它在左边显示提交图,然后是提交的散列,然后是日期、短名、引用名和主题。别名如下(在~/.gitconfig中):
[alias]
l = log --date-order --date=iso --graph --full-history --all --pretty=format:'%x08%x09%C(red)%h %C(cyan)%ad%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08 %C(bold blue)%aN%C(reset)%C(bold yellow)%d %C(reset)%s'
date -d @$(git log -n1 --format="%at") +%Y%m%d%H%M
请注意,这将转换为您的本地时区,以防这对您的用例很重要。