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

fmo*_*ork 6 git github github-api

我正在使用github api来获取文件的内容,但我还想知道文件的创建时间.有没有办法用github api获取这些信息?

tor*_*rek 1

Git 不存储文件创建日期(从某种意义上说,Git 的文件没有日期)。无论如何,你也许能够得到一些对你有用的东西,但 GitHub 的界面正在引导你走向错误的方向。

\n\n

如果您足够仔细地检查“创建文件”操作,并且熟悉 Git,您会发现它根本没有真正创建文件:相反,它进行了新的提交。这就是为什么它需要提交消息,并允许作者和提交者。

\n\n

这意味着您必须找到包含该文件的提交,然后检索有关该提交的信息。这里的问题是双重的:

\n\n
    \n
  • 查找包含该文件的提交,以及
  • \n
  • 定义“创建”的含义
  • \n
\n\n

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

\n\n

要打破这里的僵局,必须首先查找参考资料。引用只是一个与 Git 对象哈希\xe2\x80\x94 配对的名称,通常(但并非总是)是提交对象哈希。然后,您使用该引用来定位提交:如果引用直接指向提交,则您就在那里;如果该引用直接指向提交,则您就在那里;如果它指向一个标签(带注释的标签对象),您将读取该标签对象,其中包含另一个哈希 ID。继续阅读这些对象,直到找到不是标签的东西。如果这是一次提交,那么您就成功了。如果它是一棵树或一个 blob,那么该标签首先不会导致提交,并且您可能不感兴趣。

\n\n

您想要开始的参考与您用于检索文件的参考相同。

\n\n

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

\n\n

如果“创建”是指“最近创建的提交是什么时候”,您可以在这里停止:获取提交并使用作者日期和/或提交者日期。但是,如果您的意思是“为我找到一个在以前的提交中该文件存在的提交”,那么您必须做更多的工作。您现在必须检索与每个提交关联的树对象,以便查看该特定提交中是否存在$path某些文件(您一直在使用的另一个 API 仅从最顶端检索文件)foo/bar.txt引用的

\n\n

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

\n\n
    \n
  • 对于没有父项的提交(根提交),请明确归档foo/bar.txt是在此处“创建”的(如果存在)。
  • \n
  • 对于具有一个父级的提交,如果该提交中存在文件,但不存在于该提交的父级中,则显然foo/bar.txt会“创建”文件。foo/bar.txt
  • \n
  • 对于具有两个或多个父级的提交,foo/bar.txt如果该提交中存在文件,则显然会“创建”文件foo/bar.txt,但不存在于其任何父级中。
  • \n
  • 但是对于具有两个或更多父级的提交,如果foo/bar.txt此提交中存在并且存在一些但不是全部父级,则文件是否“创建”?
  • \n
\n\n

一旦解决了这个问题,您就可以开始了,但有一些小注意事项。首先,“获取一棵树”API 接口施加了限制,因此对于更大的树,您必须克隆存储库。其次,执行此操作所涉及的工作通常与克隆存储库相同:您基本上是在重新实现 Git。您不妨只使用 Git。

\n