5

我正在尝试使用 nodegit 将 git 视为内容的数据库。因此,我正在编写函数来访问 repo 中的内容。我能够检索文件 blob 和有关给定文件的其他信息,但我正在努力获取时间戳信息。

我想获取 1) 文件的创建日期,以及 2) 上次更新的日期。但到目前为止,我还没有弄清楚这是怎么可能的。

为了获取文件,我需要按照以下步骤操作:

1) 检索最新的Commit使用getMasterCommit.
2) 从Commit获取文件,TreeEntry使用getEntry.
3) 从 中TreeEntry,获取各种元数据,然后获取Blobwith getBlob
4) 从 中Blob,获取其他元数据以及文件的原始文本。

麻烦的是,我唯一能得到我找到的日期的地方是来自Commit,它有一个date功能。这可能有助于获取最后更新的日期,但实际上并没有帮助,因为它只返回Commmit(显然!)的日期,但尚不清楚该文件是否已针对该提交进行了更新。

我还希望能够获得为给定文件创建的日期。我可以想象这可以通过搜索给定 TreeEntry 的提交历史来获得,但我还不清楚如何做到这一点。事实上,能够搜索给定文件的提交历史可能是这里需要的东西。但我一直无法看到这是否可能。

有人可以在这里提供指导吗?

4

2 回答 2

2

您可以使用 rev walker 来了解历史,就像您正在做git log. 看看这个例子:https ://github.com/nodegit/nodegit/blob/master/examples/walk-history-for-file.js

使用fileHistoryWalk,您可以过滤文件以找到您感兴趣的文件,然后获取最早的 ref 拥有它。

于 2016-12-04T11:31:33.203 回答
-1

你可以iterate through each file看看
commit-hash date-time commit-message user file-name。使用终端在您的仓库中运行以下命令。

$ git ls-tree -r --name-only HEAD | while read filename; do
 echo "$(git log -1 --format="%h %ad- %s [%an]" -- $filename) $filename"
done     

样本输出:

6ea69fa Sun Nov 20 04:29:08 2016 +0600- commit-message-1 [user-1] c.txt
f83fad2 Thu Oct 27 00:14:37 2016 +0600- commit-message-10 [user-4] b.txt
b5356e3 Mon Oct 31 14:55:43 2016 +0600- commit-message-7 [user-2] a.txt
于 2016-12-04T12:47:20.753 回答