git日期语法规范

git日期语法规范,git,Git,对于传递日期的语法是否有任何规范 去吉特?例如,客户接受的日期是什么 “--before”选项到“git版本列表” 假设没有这样的规范,有没有 让git将日期转换为规范日期的方法 窗体,以便可以检查给定的日期字符串 是否被理解为人们所期望的?(更新:我已经 为此编写了一个脚本,该脚本可用 ) 信息性说明:日期解析似乎已实现 在文件date.c中,git存储库的根目录中。 “入口点”似乎是一个名为 approxidate\u小心。正如您已经发现的那样,git通常使用approxidate进行各种类

对于传递日期的语法是否有任何规范 去吉特?例如,客户接受的日期是什么 “--before”选项到“git版本列表”

假设没有这样的规范,有没有 让git将日期转换为规范日期的方法 窗体,以便可以检查给定的日期字符串 是否被理解为人们所期望的?(更新:我已经 为此编写了一个脚本,该脚本可用 )

信息性说明:日期解析似乎已实现 在文件date.c中,git存储库的根目录中。 “入口点”似乎是一个名为
approxidate\u小心。

正如您已经发现的那样,git通常使用approxidate进行各种类型的解析。 这允许您编写各种自然到疯狂的方式来指定时间

这样你就可以写“六分钟前”或“上周二”,甚至“喝茶时间”,并且approxidate通常理解你的意思。除了您已经找到的源之外,我不知道有任何明确的文档


关于这个主题的一篇不错的博客文章是

真正的代码是at,并列举了可用的格式,如iso8601、rfc2822和各种短格式、本地格式、原始格式和默认格式。

据我所知,它没有在任何地方明确指出,但它似乎接受它可以输出的所有格式,如
--date
选项文档中所述:

——日期=(相对|本地|默认| iso | rfc |短|原始)
仅对以人类可读格式显示的日期生效,例如使用
——漂亮
log.date
config变量设置日志的默认值 命令的
--date
选项

--date=relative
显示相对于当前时间的日期,例如“2小时前”

--date=local
显示用户本地时区中的时间戳

--date=iso
(或
--date=iso8601
)以iso 8601格式显示时间戳

--date=rfc
(或
--date=rfc2822
)以rfc 2822格式显示时间戳,通常在电子邮件中找到

--date=short
仅显示日期,不显示时间,格式为
YYYY-MM-DD
格式

--date=raw
以内部原始git格式显示日期
%s%z
格式

--date=default
显示原始时区(提交人或作者)的时间戳


遗憾的是,Git在接受的日期和时间格式上并不一致。内部规范格式是Unix时间戳(即自1970年1月1日午夜起的秒数)和时区偏移量的组合

对于指定日期,这有点难以理解。我将使用Git对的解释,以获得一种相对容易阅读且总是明确无误的格式。根据您正在使用的命令,您通常可以使用
--date=iso
as获得此命令。它看起来像是
2012-12-26 23:17:23+0000

(类似地,
--date=rfc
版本也不含糊,因为它只会以相同的方式解释,但包括工作日。我个人反对这样做,因为它允许您指定看起来有效但日期与日期不匹配的日期,例如
Sun,2012年12月26日01:02:03+0000
[那是今天,一个星期三])

我认为,对于在任何地方都可以接受的格式,请运行;该手册页包括以下内容(我已稍微重新格式化):

日期格式
GIT\u AUTHOR\u DATE
GIT\u COMMITTER\u DATE
环境变量支持以下日期格式:

  • Git内部格式:它是
    ,其中
    是自UNIX emoch以来的秒数。
    是UTC的正偏移量或负偏移量。例如,CET(比UTC提前两小时)是
    +0200

  • RFC 2822:2005年4月7日星期四22:13:13+0200所述的标准电子邮件格式

  • ISO 8601:标准指定的时间和日期,例如
    2005-04-07T22:13:13
    。解析器也接受空格而不是
    T
    字符

    注:此外,日期部分接受以下格式:
    YYYY.MM.DD
    MM/DD/YYYY
    DD.MM.YYYY

有些地方使用“approxidate”,因此不太麻烦,例如。如果你想深入了解这一点,代码就在Git中(通过链接michas发布的链接)。例如,以下内容来自:

指定修订

  • {}
    ,例如
    master{beday}
    HEAD{5分钟前}
    :一个ref在后缀
    后面加上一个日期规范,并用括号括起来(例如
    {beday}/code>,
    {1个月2周3天1小时1秒前}
    或{1979-02-26 18:30:00})指定前一时间点的ref值
请注意,“
date=iso
”格式不完全正确。
有关Git 2.2.0(2014年11月),请参见提交自

漂亮:提供严格的ISO8601日期格式 Git的“ISO”日期格式与ISO 8601标准的差异很小,因此不能真正符合ISO 8601标准,并且只能由ISO 8601解析器解析,例如XML工具链的解析器

--date=iso
”的输出在以下方面与iso 8601不同:

  • 一个空格,而不是
    T
    日期/时间分隔符
  • 时间和时区之间的空间
  • 时区的小时和分钟之间没有冒号
添加严格的ISO 8601日期格式以显示提交人和作者日期。
使用“
%aI
”和“
%cI
”格式说明符并添加“
--date=iso strict
”或“
--date=iso8601 strict
”日期格式名称

请参阅以进行讨论

Git 2.2