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

19

据我所见,Git提交日期和作者日期只精确到秒。我想知道这是否是最精确的时间戳,或者我能否获得毫秒甚至微秒级别的时间戳。

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

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

结果: 1421437899

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


2
这只是Unix时间戳,并且和时间戳一样精确。实际上,git提交是特别格式化的文本,其中时间以时间戳形式存储。 - Alexey Ten
2个回答

25

Git提交/作者日期的分辨率为1秒,正如Alexey TenEdward Thomson所指出的,这也是Unix时间戳的分辨率

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

  • 创建一个提交(commit),然后
  • 迅速地修改它,但不改变任何内容(包括提交信息)。

如您所知,修改提交实际上会创建一个新的提交。通常,新提交将具有不同的时间戳和因此与第一个提交不同的提交ID。但是,您可以编写一个脚本,在同一系统时钟秒内创建并修改提交(如果运气好的话!),从而产生与第一个提交相同哈希值的提交。

首先,进行设置:

$ mkdir testGit
$ cd testGit
$ git init

然后将以下内容写入脚本文件(以下称为commitAmend.sh

(Note: "called"在此处表示“命名为”)

#!/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

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


4
有趣的实验。+1 - VonC
感谢您提供详细的答案。那么,是否有一种方法可以使用 git add 获取将文件添加到 Git 的时间? - Jack Vial
1
@Jack,暂存文件不会记录任何相关的时间戳。当你暂存一个文件时会发生什么,在这里有解释:https://dev59.com/h18e5IYBdhLWcg3wyM_N#25352119 - jub0bs
@Jubobs 在那个链接中对 git add 进行了很好的解释。我认为第一次提交的 UNIX 时间戳可能足以满足我的需求。我有一个由 post-merge 钩子触发的数据库迁移脚本,我希望所有的 .sql 迁移文件按正确的顺序运行,但如果多个文件同时添加到迁移目录并提交,它们都具有相同的时间戳,这是一个问题,因为我将时间戳映射到键,并将文件路径作为关联数组的值进行排序。 - Jack Vial
@Jack 或许值得在另一个问题中寻求帮助,但恐怕我无法回答那个问题。 - jub0bs

6

这只需要一秒钟的时间;虽然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时间戳。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接