已经有一个question询问如何在Git中查找提交的日期。但是,该问题的所有答案都使用porcelain commands的git show
或git log
命令。关于瓷器命令的标准观点似乎是output format may change,因此应尽可能避免在脚本中使用它们。
有没有一种方法可以仅使用管道命令来获取git commit的时间戳?
答案 0 :(得分:2)
git cat-file -p HASH_OF_COMMIT
将返回提交Blob的内容。
因此,您将有权访问所有元数据,以及作者和创建日期。
答案 1 :(得分:2)
提交对象的格式如下:
<CheckBox
android:id="@+id/settings_hide_nsfw_thumbnails"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
(其中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
是ASCII空格字符0x20,而SP
是ASCII换行字符0x0a)。
因此,基本上要实现您想要的目标,您:
LF
git cat-file commit <commitish_of_interest>
的内容
以stdout
结尾的行结尾。LF
开头的行停止。author SP
起的秒数,其格式为
00:00
,其中SHHMM
是符号,S
或-
,它们分别定义了格林威治以西或以东的偏移量,以及{{ 1}}是时区的偏移量,以+
小时和HHMM
分钟为单位。请注意,HH
和MM
字段的内容仅在“正常”提交时相同。在重新提交的提交中,至少时间戳可能有所不同,并且如果某个提交是由实际编写该提交的人(其作者)以外的其他人重新提交的,则字段将有所不同。对于通过author
通过补丁创建的提交,也是如此。
答案 2 :(得分:1)
Git在适当地区分管道和瓷器方面有些松懈。在脚本中使用管道命令的建议是好的,但是有时命令(例如git log
)没有适当的管道变体,但是确实具有使它成为“ plumby”的选项。 ,如果我能补个字。
在这种情况下,适当的命令是(根据comment from Josh,于2019年3月21日编辑):
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
...)