Git 的提交日期或作者日期时间戳的分辨率是多少?

What is the resolution of Git's commit-date or author-date timestamps?

据我所知,Git 提交日期和作者日期仅精确到一秒。我想知道这是否和他们得到的一样精确,或者我可以获得以毫秒甚至微秒为单位的时间戳。

此命令returns UNIX Timestamp 使用第一次提交的提交哈希:

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

结果:1421437899

GIT 的提交日期或作者日期时间戳精度是多少?

是一秒;虽然 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.

确实可以看到这是一个分辨率为1秒的Unix时间戳

Git commit/author 日期的分辨率是 1 秒,正如 and , is also the resolution of Unix timestamps 所指出的那样。

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

  • 创建一个提交,并且
  • 非常快速地修改它,不更改任何内容(甚至不更改提交消息)。

如您所知,amending a commit actually creates a new commit。通常,新提交将具有不同的时间戳,因此具有与第一次提交不同的提交 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: jub0bs <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: jub0bs <xxxxxxxxxxx>
Date:   Fri Jan 30 14:25:58 2015 +0000

add README

相同的时间戳,相同的哈希值!