首页 > 解决方案 > 在格式良好的 git 日志输出(格式说明符)中检索时区?

问题描述

我正在尝试打印带有 UTC/UNIX 纪元秒时间戳、提交时区和短哈希的 git 日志。

我注意到https://git-scm.com/docs/git-log/2.17.1

%ad:作者日期(格式尊重 --date= 选项)

%at:作者日期,UNIX 时间戳

  • --date=raw 将日期显示为自纪元 (1970-01-01 00:00:00 UTC) 以来的秒数,后跟一个空格,然后是时区作为与 UTC 的偏移量(带四位数字的 + 或 -;前两个是小时,后两个是分钟)。即,好像时间戳是用strftime("%s %z")) 格式化的。请注意,-local 选项不会影响 seconds-since-epoch 值(始终以 UTC 测量),但会切换随附的时区值。

所以,我先天真地尝试了这个:

$ git --no-pager log --reverse --pretty='%at %z %h'
1528917616 %z 1cabbe9
1528960200 %z 3fad300
1528964789 %z ba4e746
1528964798 %z d39a4f8
...

显然, git log /%z不会扩展。--pretty--format

然后,有点意外,我尝试了这个:

$ git --no-pager log --reverse --date=raw --pretty='%ad %h'
1528917616 +0000 1cabbe9
1528960200 +0000 3fad300
1528964789 +0000 ba4e746
1528964798 +0000 d39a4f8
1528967981 +0000 a9cdecb
1528970465 +0000 3e9cee9
....

...这正是我想要的!除了,这里我没有单独的时区格式参数,所以如果我愿意,我不能将它移到其他地方,至少不能直接在git log命令中。

那么,有谁知道,如果有一个我可以直接在 中使用的格式说明符,git log它只会让我获得提交时间戳的时区?

标签: gittimezone

解决方案


git log, --pretty(或--format)中没有时区占位符。但--date=format:确实如此。它似乎--date=raw相当于--date=format:"%s %z". 因此,如果您只想要特定提交的时区,您可以尝试:

git log -1 <commit> --pretty=%ad --date=format:%z

请注意,这%ad是作者日期。如果您想要提交日期,请%cd改用。此外,还有几个用于预定义日期格式的占位符,例如%ai, %at,%cD等。如果使用了这些占位符中的任何一个,则将--date=format被忽略。


推荐阅读