Git的提交date或作者date时间戳的parsing是什么?

从我所看到的,Git commit date和author date只能精确到一秒。 我想知道,如果这是精确的,或者我可以得到毫秒或甚至微秒的时间戳。

此命令使用第一次提交的提交哈希来返回UNIX时间戳 :

git show -s --format="%ct" 2d9afdfb9e2fa9b349312734b462bb7d57a684ee 

结果: 1421437899

什么是GIT的提交date或作者date时间戳精度?

Git提交/作者日期的解决方案是1秒,正如Alexey Ten和Edward Thomson所指出的那样,也是Unix时间戳的解决方案 。

一个有趣的实验,你可以进行的是

  • 创建一个提交,并
  • 修改它很快,而不需要改变任何东西(甚至不提交提交消息)。

如您所知, 修改提交实际上会创建一个新的提交 。 通常情况下,新提交会有不同的时间戳,因此,与第一次提交不同的提交ID。 但是,您可以编写一个脚本来创建提交并修改它,希望在同一个系统时钟秒内完成,从而生成与第一个哈希相同的提交。

首先,设置一下:

 $ mkdir testGit $ cd testGit $ git init 

然后将其写入一个脚本文件(下面称为commitAmend.sh

 #!/bin/sh # create content and commit printf "Hello World.\n" > README.md git add README.md git commit -m "add README" git log # amend the commit git commit --amend --no-edit git log 

并运行它:

 $ sh commitAmend.sh [master (root-commit) 11e59c4] add README 1 file changed, 1 insertion(+) create mode 100644 README.md commit 11e59c47ba2f9754eaf3eb7693a33c22651d57c7 Author: Jubobs <xxxxxxxxxxx> Date: Fri Jan 30 14:25:58 2015 +0000 add README [master 11e59c4] add README Date: Fri Jan 30 14:25:58 2015 +0000 1 file changed, 1 insertion(+) create mode 100644 README.md commit 11e59c47ba2f9754eaf3eb7693a33c22651d57c7 Author: Jubobs <xxxxxxxxxxx> Date: Fri Jan 30 14:25:58 2015 +0000 add README 

相同的时间戳,相同的散列!

这是一秒钟; 而git-show会对输出进行一些修改,您可以使用git-cat-file命令查看原始提交信息。 例如:

 % git cat-file commit HEAD tree 340c0a26a5efed1f029fe1d719dd2f3beebdb910 parent 1ac5acdc695b837a921897a9d42acc75649cfd4f author Edward Thomson <ethomson@edwardthomson.com> 1422564055 -0600 committer Edward Thomson <ethomson@edwardthomson.com> 1422564055 -0600 My witty comment goes here. 

你可以看到,这是一个Unix时间戳,分辨率为1秒。