首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用管道命令找到git提交的日期?

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

Stack Overflow用户
提问于 2018-10-08 19:01:42
回答 3查看 396关注 0票数 3

已经有一个question在Git中询问如何查找提交日期。然而,这个问题的所有答案都使用git showgit log命令,它们都是porcelain commands;陶瓷命令的标准智慧似乎是,只要有可能,就应该避免在脚本中使用它们的output format may change

是否有方法仅使用管道命令获得git提交的时间戳?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-08 20:19:31

提交对象的格式如下:

代码语言:javascript
复制
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

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

因此,基本上要实现你想要的,你:

  1. 调用git cat-file commit <commitish_of_interest>
  2. 通过LF-terminated行迭代该程序转储到它的-terminated中的内容。
  3. 在以author SP开头的行处停下来。
  4. 把它分割成空格,然后取最后两个字段。第一个是第二个字段定义的时区中的00:00的秒数,该字段的格式为SHHMM,其中S是一个符号,-+,相应地,-+定义了偏移量在哪里,相应地,HHMM是时区的偏移量(以HH时数和MM minutes为单位)。
  5. 处理这两个字段的值以格式化时间戳。

注意,authorcommitter字段的内容只有在"normal“提交时是相同的。在重基提交时,至少时间戳可能有所不同,如果提交是由实际编写提交的人(其作者)重定向的,则字段将有所不同。从通过git am创建的修补程序创建的提交也是如此。

票数 5
EN

Stack Overflow用户

发布于 2018-10-08 19:44:08

git cat-file -p HASH_OF_COMMIT将返回提交blob的内容。因此,您将可以访问所有元数据,因此,作者和创建日期。

票数 2
EN

Stack Overflow用户

发布于 2018-10-08 20:36:01

Git在正确区分管道和瓷器方面有点松懈。在脚本中使用管道命令的建议是好的,但是有时命令--比如git log--没有合适的管道变体,但是如果我能编出一个单词的话,它确实有一些选项可以使它“直线下降”。

在这种情况下,一个适当的命令(编辑,2019年3月21日,每个comment from Josh):

代码语言:javascript
复制
git -c log.showSignature=false log --pretty=format:%ad --no-walk <hash>

(或将%cd作为提交者日期的格式指令;将各种日期格式选项添加到git log本身,或者作为%aD更改日期格式)。没有什么能确切地保证git log可能不会添加新特性,比如log.decorate设置,这可能会破坏这一点,而且Git应该使用它自己,并将--porcelain选项添加到像git status那样的命令中。(请注意,git status现在有--porcelain--porcelain=v2,两者都将其转换为管道。不要问我为什么这不是拼写为--plumbing.)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52708548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档