我试图在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]"
注意“date=iso”格式:它并不是iso 8601。 参见commit "466fb67" from Beat Bolli (bbolli),用于Git 2.2.0(2014年11月)
pretty:提供严格的ISO 8601日期格式
Git's "ISO" date format does not really conform to the ISO 8601 standard due to small differences, and it cannot be parsed by ISO 8601-only parsers, e.g. those of XML toolchains. The output from "--date=iso" deviates from ISO 8601 in these ways: a space instead of the T date/time delimiter a space between time and time zone no colon between hours and minutes of the time zone Add a strict ISO 8601 date format for displaying committer and author dates. Use the '%aI' and '%cI' format specifiers and add '--date=iso-strict' or '--date=iso8601-strict' date format names.
请看这个帖子进行讨论。
格式选项%ai是我想要的:
%ai:作者日期,类似ISO 8601的格式
--format="%ai"
您可以使用字段截断选项来避免使用太多%x08字符。例如:
git log --pretty='format:%h %s%n\t%<(12,trunc)%ci%x08%x08, %an <%ae>'
等价于:
git log --pretty='format:%h %s%n\t%ci%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08%x08, %an <%ae>'
而且对眼睛也比较好看。
更好的是,对于这个特殊的例子,使用%cd将遵守——date=<格式>,所以如果你想要YYYY-MM-DD,你可以这样做,完全避免%<和%x08:
git log --date=short --pretty='format:%h %s%n\t%cd, %an <%ae>'
我只是注意到这篇文章相对于最初的帖子有点循环,但我还是把它留着,以防其他人带着和我一样的搜索参数来到这里。