我正在使用github api grab the contents of files,但我也希望看到文件的创建时间。有没有办法用github api获取这些信息?
答案 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
。这就是定义你所创造的意思的地方"变得特别困难。
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。