【问题标题】:Is there any way to get the latest commit date and time for every file in a GitHub repo?有什么方法可以获取 GitHub 存储库中每个文件的最新提交日期和时间?
【发布时间】:2018-12-01 06:20:51
【问题描述】:

我正在尝试构建一个工具,允许我将(私有)GitHub 存储库中的文件与 Web 服务器上的文件进行比较。

我已经弄清楚如何查询 GH API 的 v3 以获取 repo 中所有文件的列表。类似于以下内容:

https://api.github.com/repos/username/repo-name/git/trees/sha?recursive=1

其中usernamerepo-namesha 都是我知道的变量。这工作正常。但是,我需要能够获取存储库中每个文件的最后更新/修改时间戳,以便我可以将其与 Web 服务器上关联文件的最后更新/修改时间戳进行比较,并知道文件在repo 的 master 分支比服务器上的文件更新。

有没有办法做到这一点?我已经彻底查看了 GH API 文档,但找不到任何方法来获取 repo 中文件的最后更新/修改时间戳。

我想我可以得到每个 GH 提交的时间戳并查看提交中有哪些文件,但是对于长时间没有更改/提交的文件,我将不得不经历太多的提交获取时间戳,这似乎不太合理。

非常感谢任何帮助/指导。

【问题讨论】:

  • 使用 API 很难做到,因为您需要扫描所有提交并列出每个提交中的文件。如果您可以使用本地存储库,我可以为您指出 2 个脚本。第一个在GitWiki;用 Perl 编写;应该以这种方式工作——扫描提交并获取文件的时间戳。我在运行它时遇到了问题,所以我用 Python 重写了它;在我的git-scripts repo 中查看脚本set-commit-date.py
  • 感谢您的参考。虽然不太熟悉 Perl,但不确定如何使用您链接到的 Python 存储库。不过,资源很好。谢谢。
  • Direct link to the script。我必须承认我也不是 Perl 程序员,这也是我用我喜欢的语言重写脚本的原因之一。
  • 啊,我明白了。它解析 git 日志以确定要做什么。也很聪明。谢谢。

标签: php git api github


【解决方案1】:

我认为在网络服务器上计算源文件的哈希值并比较哈希值而不是时间戳会更好。

您可以像这样获取源文件的 git-hash:

git hash-object foo.php

如果你没有在网络服务器上安装 git,你可以使用普通的 bash:

printf "blob $(wc -c < foo.php)\0$(cat foo.php)\n" | sha1sum

【讨论】:

  • 这很聪明。我喜欢。本质上,如果服务器文件的计算哈希值等于 GH 主 repo 文件的 SHA,那么该文件是最新的,对吗?如果哈希值不匹配,则文件已过期,我需要更新服务器上的文件,对吗?谢谢。
  • jil,我一直在玩这个,我发现以下内容:我从分支中下载最新文件,然后将这些文件推送到有问题的 Web 服务器,然后当我在 Web 服务器文件上运行 git hash-object 并将它们与 GitHub 存储库中相同文件上的 SHA 进行比较时,它们不匹配。我很确定我也从正确的分支 (dev) 获取文件。关于可能导致这种情况的任何想法?谢谢。
猜你喜欢
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 2016-05-27
  • 1970-01-01
  • 2018-03-25
  • 2022-10-31
  • 2012-10-17
相关资源
最近更新 更多