Git 是否存储文件创建时间?

und*_*ned 3 git

假设我创建了一个项目并将其推送到 GitHub。有人克隆项目时,能不能看到项目中每个文件的文件创建时间

mkr*_*er1 5

他们可以通过提交日期查看文件添加到存储库的时间。

他们看不到本地文件系统中文件的“文件创建”或“文件修改”时间戳。

例子

$ git init
Initialized empty Git repository in /tmp/tmp.t4KdOYhQGr/.git/
$ echo bla >file.txt
$ git add file.txt
$ git commit -m 'Added a file'
[master (root-commit) 26b458c] Added a file
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt
Run Code Online (Sandbox Code Playgroud)

让我们看看提交对象:

$ git cat-file -p 26b458c
tree 80717c30ff0d58d079079d2f4d38441035093c49
author mkrieger1 <me@example.email> 1590570496 +0200
committer mkrieger1 <me@example.email> 1590570496 +0200

Added a file
Run Code Online (Sandbox Code Playgroud)

它包含了:

  • 对象的引用
  • 一个作者与姓名,电子邮件和时间戳
  • 一个提交者有姓名,电子邮件和时间戳

这些时间戳指定首次提交提交的时间以及提交的时间(可以不同,例如在挑选樱桃的情况下,但这里是相同的)。

我们看一下提交引用的对象:

$ git cat-file -p 80717c30ff0d58d079079d2f4d38441035093c49
100644 blob a7f8d9e5dcf3a68fdd2bfb727cde12029875260b    file.txt
Run Code Online (Sandbox Code Playgroud)

它包含一个blob对象列表(在这种情况下只有一个),每个对象:

  • 文件权限
  • 对 blob 数据的引用
  • 树中 blob 的名称

它根本不包含任何时间戳。我们看一下树引用的blob对象:

$ git cat-file -p a7f8d9e5dcf3a68fdd2bfb727cde12029875260b
bla
Run Code Online (Sandbox Code Playgroud)

这只是裸文件内容,这里也没有时间戳。

结论

存储在 Git 存储库中的唯一时间戳是提交对象中的“作者”和“提交者”日期。该BLOB对象不包含任何时间戳。

Git 存储库中包含的本地文件系统中没有关于文件的时间戳信息。