从Github存储库上次更新文件时获取

时间:2018-05-05 21:38:23

标签: github github-api

我可以通过using the GitHub v3 API.获取文件内容(如果它是文件夹,我可以获取文件列表) 例如:

https://api.github.com/repos/[Owner]/[Repository]/contents/[Folder]

但我怎么知道文件上次更新的时间?是否有API?

4 个答案:

答案 0 :(得分:5)

如果您知道确切的文件路径,则可以使用list commits on repository API指定path,其中仅包含具有此特定文件路径的提交,然后提取最新提交(最新提交是第一个提交) ):

使用Rest API v3

https://api.github.com/repos/bertrandmartel/speed-test-lib/commits?path=jspeedtest%2Fbuild.gradle&page=1&per_page=1

使用&

curl -s "https://api.github.com/repos/bertrandmartel/speed-test-lib/commits?path=jspeedtest%2Fbuild.gradle&page=1&per_page=1" | \
     jq -r '.[0].commit.committer.date'

使用GraphqQL API v4

{
  repository(owner: "bertrandmartel", name: "speed-test-lib") {
    ref(qualifiedName: "refs/heads/master") {
      target {
        ... on Commit {
          history(first: 1, path: "jspeedtest/build.gradle") {
            edges {
              node {
                committedDate
              }
            }
          }
        }
      }
    }
  }
}

Try it in the explorer

使用&

curl -s -H "Authorization: Bearer YOUR_TOKEN" \
     -H  "Content-Type:application/json" \
     -d '{ 
          "query": "{ repository(owner: \"bertrandmartel\", name: \"speed-test-lib\") { ref(qualifiedName: \"refs/heads/master\") { target { ... on Commit { history(first: 1, path: \"jspeedtest/build.gradle\") { edges { node { committedDate } } } } } } } }"
         }' https://api.github.com/graphql | \
     jq -r '.data.repository.ref.target.history.edges[0].node.committedDate'

答案 1 :(得分:1)

由于store file timestamps (and other metadata like permissions and ownership)的原因,考虑到git不I detailed here,这将是令人惊讶的。

因此,远程存储库端(此处为GitHub)也不存在该信息。

答案 2 :(得分:0)

您实际上可以使用您特别提到的请求来确定所需的内容。

请注意,以下所有日期/时间都在格林尼治标准时间下(当然)。

  

复制并粘贴以下命令以由用户YenForYang查找存储库ForStackExchange中文件夹/文件的上次修改日期和时间:

\curl -sIA. --ignore-content-length  \
     -H"If-Modified-Since: Sun May 01 00:00:00 9999" \
     "https://api.github.com/repos/YenForYang/ForStackExchange/contents/Folder/File?ref=branch" \
| \grep -m1 -oP "(?<=Last-Modified: )[ADFJMNOSTWa-eghilnoprtuvy0-9:, ]{25}" \
     

(如果无法使用Perl正则表达式,则可以... | grep -F -m1 "Last-Modified:"


  

以上命令应返回(GMT):Thu, 27 Dec 2018 11:01:26   (或更高版本,如果我由于某种原因更新了文件)


请注意,如果未指定ref参数,则ref=master


如果您无法复制和粘贴并且不关心API速率限制,则可以选择较短的时间:

\curl -sIL "api.github.com/repos/yenforyang/forstackexchange/contents/Folder/File?ref=branch" | \grep "^Las"

如果Windows上没有grep,请改用find "Last-Modified: "(双引号是必需的)。

如果您在Windows上没有卷曲(下载...或),请使用Powershell

(iwr -me HEAD -usebasic "https://api.github.com/repos/yenforyang/forstackexchange/contents/Folder/File?ref=branch").Headers."Last-Modified"

答案 3 :(得分:0)

使用Python

pip安装PyGithub

from github import Github
g = Github()
repo = g.get_repo("datasets/population")
print(repo.name)
commits = repo.get_commits(path='data/population.csv')
print(commits.totalCount)
if commits.totalCount:
    print(commits[0].commit.committer.date)

输出:

population
5
2020-04-14 15:09:26

https://github.com/PyGithub/PyGithub