如何仅使用管道命令查找 git 提交的日期?

Pon*_*ont 3 git scripting git-plumbing

已经有一个问题询问如何在 Git 中找到提交的日期。但是,该问题的所有答案都使用git showgit log命令,它们都是瓷器命令;关于瓷器命令的标准智慧似乎是它们的输出格式可能会改变,因此应尽可能避免在脚本中使用它们。

有没有办法只使用管道命令来获取 git commit 的时间戳?

kos*_*tix 5

提交对象的格式如下:

tree SP SHA_1_NAME_AS_HEX LF
parent SP SHA_1_NAME_AS_HEX LF
...
author SP any number of words SP <email_addr> SP TIMESTAMP SP TZ_OFFSET LF
committer SP any number of words SP <email_addr> SP TIMESTAMP SP TZ_OFFSET LF
LF
commit message LF
LF
extensive commit message
Run Code Online (Sandbox Code Playgroud)

(其中SP是 ASCII 空格字符,0x20,LF是 ASCII 换行符,0x0a)。

所以基本上要实现你想要的,你:

  1. 称呼 git cat-file commit <commitish_of_interest>
  2. 迭代该程序转储到其stdout byLF终止行的内容。
  3. 停在以 开头的行author SP
  4. 将其拆分为空格,并取最后两个字段。第一个是自00:00第二个字段定义的时区以来的秒数,其格式为 SHHMMwhereS是一个符号,-或者+,whcih 定义了偏移量是在格林威治西部还是东部,相应地,HHMM是时区的偏移量,以HH小时和MM分钟为单位。
  5. 处理这两个字段的值以格式化时间戳。

请注意,authorcommitter字段的内容仅在“正常”提交时相同。在重新定位的提交上,至少时间戳可能不同,并且如果提交是由实际创作提交的人(其作者)以外的人重新定位的,则字段将不同。对于通过补丁创建的提交也是如此git am