我知道如果我签出了Git存储库,我可以使用git
CLI获取当前的提交哈希值。但是有没有办法在没有克隆存储库的情况下通过HTTP执行此操作?
例如,让我们说我想得到https://github.com/jashkenas/coffeescript的当前哈希值。手动,我可以转到页面,按键盘上的Y
,然后看到哈希是(在撰写本文时)1f197fcc1bf1a15bc45a6b23fb3f706ffcb77025
。这意味着,如果稍后我想下载CoffeeScript源,我可以下载https://github.com/jashkenas/coffeescript/archive/1f197fcc1bf1a15bc45a6b23fb3f706ffcb77025.zip,它会给我源代码。
有没有办法只使用HTTP(例如curl)?我可以点击某个端点,它会告诉我默认分支的当前哈希是什么吗?概括一下,是否有端点会告诉我
的哈希值答案 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)
此命令似乎正是您要找的。 p>
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 documentation,GET /repos/:owner/:repo/git/commits/:sha
应该为您提供当前的SHA-1哈希等等。
您可get a tag使用此GET /repos/:owner/:repo/git/tags/:sha