仅使用HTTP获取存储库的当前HEAD的哈希值

时间:2015-06-13 05:49:51

标签: git github

我知道如果我签出了Git存储库,我可以使用git CLI获取当前的提交哈希值。但是有没有办法在没有克隆存储库的情况下通过HTTP执行此操作?

例如,让我们说我想得到https://github.com/jashkenas/coffeescript的当前哈希值。手动,我可以转到页面,按键盘上的Y,然后看到哈希是(在撰写本文时)1f197fcc1bf1a15bc45a6b23fb3f706ffcb77025。这意味着,如果稍后我想下载CoffeeScript源,我可以下载https://github.com/jashkenas/coffeescript/archive/1f197fcc1bf1a15bc45a6b23fb3f706ffcb77025.zip,它会给我源代码。

有没有办法只使用HTTP(例如curl)?我可以点击某个端点,它会告诉我默认分支的当前哈希是什么吗?概括一下,是否有端点会告诉我

的哈希值
  • 默认分支的HEAD,
  • 给定分支的HEAD,或
  • 特定标签?

4 个答案:

答案 0 :(得分:2)

如果您特别希望在GitHub上获取此信息,可以使用the GitHub API检索它,这将返回一个稍大的JSON结构,其中包含有关该分支状态的详尽信息:

https://api.github.com/repos/jashkenas/coffeescript/branches/master

(或删除分支名称以获得所有分支及其头部的更简洁列表。)

对于托管在其他Web服务上的Git存储库,可以获取存储库下的资源/info/refs(例如,http://example.com/repo.git/info/refs)以获取所有分支的列表,例如:< / p>

2aae6c35c94fcfb415dbe95f408b9ce91ee846ed    refs/heads/master

然而,这在GitHub 上不可用,因为GitHub disabled the "dumb" HTTP transport in 2011出于性能原因。更换&#34; smart&#34;运输虽然远远优于Git自己的使用,但在这种情况下并不可用。

答案 1 :(得分:2)

我宁愿使用GitHub API Reference来查询SHA1:

在每种情况下,您都会获得类似于(对于给定标签)的JSON答案

{
  "ref": "refs/tags/v1.7.0",
  "url": "https://api.github.com/repos/git/git/git/refs/tags/v1.7.0",
  "object": {
    "sha": "15c6c83c4950d80e6bbabc5186c90b35629ce4f7",
    "type": "tag",
    "url": "https://api.github.com/repos/git/git/git/tags/15c6c83c4950d80e6bbabc5186c90b35629ce4f7"
  }
}

注意:要获取HEAD(在GitHub中,名为&#34;默认分支&#34;),请参阅&#34; How do I find the default branch for a repository using the Github v3 API&#34; (和repos get

  

拨打/repos/:owner/:repo并阅读master_branch属性值 - 这是默认分支的名称。

示例:https://api.github.com/repos/git/git

"default_branch": "master",

我已经实现了一个简短的Go程序,它就是这样做的(找到GitHub repo引用的SHA1)

请参阅VonC/ghref

  • 查找GitHub存储库的默认分支

    vonc@voncm:~/prog/git/ghref$ bin/ghref VonC/ghref
    master
    
  • 查找GitHub仓库分支的SHA1

    vonc@voncm:~/prog/git/ghref$ bin/ghref VonC/ghref master
    c024c28ff3e17cd6864c6d692845860b4c3d8003
    
  • 它也适用于标签:

    vonc@voncm:~/prog/git/ghref$ bin/ghref VonC/ghref v1.1.0
    59a4be1888c2e8d9f7c83892c4c16b92cc333328         (^^^^^^)
    
  • 找到GitHub仓库的默认分支的SHA1:

    vonc@voncm:~/prog/git/ghref$ bin/ghref VonC/ghref | xargs bin/ghref VonC/ghref
    c024c28ff3e17cd6864c6d692845860b4c3d8003
    

答案 2 :(得分:1)

此命令似乎正是您要找的。

git ls-remote https://github.com/jashkenas/coffeescript

您可以从以HEAD和回车结束的行解析SHA-1哈希。

E.g。使用grep向您展示我正在谈论的话:

git ls-remote https://github.com/jashkenas/coffeescript | grep "HEAD$"

答案 3 :(得分:0)

根据GitHub API documentationGET /repos/:owner/:repo/git/commits/:sha应该为您提供当前的SHA-1哈希等等。

您可get a tag使用此GET /repos/:owner/:repo/git/tags/:sha