如何获取Git存储库初始化日期?

问题描述:

我可以得到git init的日期/时间吗?如何获取Git存储库初始化日期?

不是第一次提交。

如果可能,我该如何得到它?


我在寻找这个主要用于连续集成的修订版本号。 我喜欢使用版本密钥的Git提交哈希,但它是一个iOS应用程序,并且有一些限制,我必须在版本字符串中只使用数字和逗号。

接下来,我尝试使用Unix时间戳(秒)作为修订版本号,但它太大而无法为我的项目显示一些有意义的信息。然后,我又有了一个想法,即从创建当前Git存储库开始计算秒数。

我现在的想法是,

HEAD_TIMESTAMP=`git show -s --format=%ct HEAD` 
INIT_TIMESTAMP=<get init date> 
DELTA=`expr $HEAD_TIMESTAMP - $INIT_TIMESTAMP ` 
DAYS=`expr $DELTA/86400` 
SECS=`expr $DELTA % 86400` 
REV=$DAYS.$SECS 

我认为这也可以使用日期/第一提交时间。但是如果可能的话,我喜欢使用git init的日期/时间,因为它是存储库的真正创建时间。

+0

看起来据我所知,Git不会记录时间戳时'GIT中的init '跑了......如果它曾经跑过;如果回购问题被克隆而不是初始化?然而,你最好的选择可能是得到'.git/description'文件的时间戳。这是在'git init'中创建的一个文件,并且自那之后您可能没有更改过。 – Jubobs 2014-09-05 16:05:17

+0

作为持续集成的修订版本,您可以连续计数,也可以使用git commit hash或date plus git commit hash。依赖于几台机器的时钟和时间在某些时候会出错。你也可以计算提交次数,但是如果你建立了多个分支,它也会发生碰撞。 – orkoden 2014-09-05 16:11:19

+2

正如@Jubobs所提到的,这通常不会被'git'记录。然而,作为一种不完全可靠的解决方法,'.git'目录中有一些文件/目录(如'description','branches','info'和'hooks'),它们可能仍然有原始文件从'git init'运行时的时间戳... – twalberg 2014-09-05 20:06:22

你可以找到.git目录的创建日期:
stat -c %i .git会给你一些数字
不是运行sudo debugfs -R 'stat <your_number>' /dev/sdXYcrtime:

+1

这并不可靠。 '.git'文件夹的创建日期不一定对应'git init'运行的日期。考虑复制项目目录并将其粘贴到其他位置的情况。 – Jubobs 2014-12-08 15:00:25

+0

@jthill如果一个inode的ctime包含创建时间,这似乎是一个非常常见的误解,那可能是真的。然而'ctime'代表“最后状态改变的时间”,除了简单的创建之外,它可以被更新为各种其他事件 - 例如更改所有者,组,链接数量(想象在这种情况下添加或删除目录中的文件),模式等... – twalberg 2014-12-08 16:11:11

+0

@twalberg好,至少有一个现在不常见,现在:-P ...谢谢。 – jthill 2014-12-08 16:22:51