使用 nodegit,如何找到给定文件在 git 存储库中的最后更新日期?

Using nodegit, how can I find the date a given file was last updated in a git repo?

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

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

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

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

问题是,我唯一可以获得日期的地方是 Commit,它有一个 date 函数。这可能有助于获取最后更新日期,但它实际上没有帮助,因为它只是 returns Commmit 的日期(很明显!),但不清楚该文件是否已针对该提交进行了更新。

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

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

有一个 rev walker 可以用来遍历历史,就像你在做 git log 一样。看看这个例子:https://github.com/nodegit/nodegit/blob/master/examples/walk-history-for-file.js

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

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

$ 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