使用 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
我正在尝试使用节点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