如何使用github api检查文件创建日期

时间:2016-08-29 20:23:15

标签: git github github-api

我正在使用github api grab the contents of files,但我也希望看到文件的创建时间。有没有办法用github api获取这些信息?

2 个答案:

答案 0 :(得分:2)

可以通过path parameter过滤commits端点,以便它只返回触及给定路径的提交。除非你想变得棘手并且要多个请求来跟踪文件移动/重命名,否则我只使用返回的最远提交的提交日期。

答案 1 :(得分:1)

Git不会存储文件创建日期(从重要意义上讲,Git的文件不会 创建日期)。无论如何,你可能会对你有所帮助,但是GitHub的界面会引导你走错方向。

如果你仔细检查"create a file" operation,并且熟悉Git,你会发现它根本没有真正创建一个文件:相反,它会创建一个新的提交。这就是为什么它需要提交消息,并允许作者和提交者。

这意味着您必须找到包含该文件的提交,然后retrieve the information about that commit。这里的问题有两个:

  • 查找包含文件
  • 的提交
  • 定义您的意思"创建"

要查找提交,您需要提交哈希(SHA-1 ID)。获取提交哈希的主要位置来自提交。因此,您需要提交哈希才能找到提交哈希。这当然是一个问题。

要打破这里的僵局,你必须从looking up a reference开始。引用只是一个与Git对象哈希配对的名称 - 通常但不总是 commit 对象哈希。然后,您使用该引用来查找提交:如果引用直接指向提交,那么您就在那里;如果它指向标记(带注释的标记对象),则读取标记对象,该对象包含另一个哈希ID。继续阅读这些对象,直到你得到标签的东西。如果这是一个提交,你就成功了。如果它是树或blob,那么标记首先不会导致提交,并且可能对您不感兴趣。

您要开始的引用与您用于检索文件的引用相同。

现在你有一个提交ID并且可以检索提交,现在是时候查看有问题的文件是否存在于该提交中。据推测,确实存在特定提交,因为您一直在检索该文件。但该文件可能尚未在该提交中创建:它可能只是从之前的提交中继承而来。

如果,通过"创建",您的意思是" 最近提交创建时间",您可以在此处停止:获取提交并使用作者日期和/或提交者日期。但是,如果你的意思是"在一些之前的提交中找到我的提交,文件不存在",你必须做更多的工作。您现在必须retrieve the tree object associated with each commit,以查看特定提交(您之前使用的其他API)中是否存在某些文件$path,例如foo/bar.txt从给定引用上的 tip-most 提交中检索文件。)

请注意,每次提交都可以包含多个父级。合并提交会发生这种情况。大多数此类提交只有两个父母,但任何数字都可能超过1。查看包含某个文件路径$path的合并提交时,其每个(多个)父项也可能包含文件$path或缺少文件$path。这就是定义你所创造的意思的地方"变得特别困难。

  • 对于使用 no 父级(根提交)的提交,显然文件foo/bar.txt是"已创建"在这里,如果它存在。
  • 对于一个父级的提交,显然文件foo/bar.txt是"已创建"如果此提交中存在foo/bar.txt,但此提交的父级中不存在。
  • 对于使用两个或更多父级的提交,显然文件foo/bar.txt是"已创建"如果此提交中存在foo/bar.txt,但其父项的
  • 但对于有两个或更多父母的提交,如果此提交中存在foo/bar.txt部分但不是所有父母,则文件&#34;已创建&#34;?< / LI>

一旦你解决了这个问题,你就可以开始了,但有一些小问题。首先,&#34;得到一棵树&#34; API接口强加限制,因此对于较大的树,您必须克隆存储库。其次,执行此操作所涉及的工作通常是克隆存储库的相同:您基本上是重新实现Git。你也可以使用Git。