1

我想知道是否有一种 hacky 方法来获取 Java 中特定 GitHub 存储库中分支的最新提交的提交 SHA。据我所知,GitHub API 只有一个钩子可以访问完整的提交信息,而不仅仅是 API。有人有办法做到这一点吗?

4

2 回答 2

2

按照 cjc343 的建议,使用refs api :

GET /repos/:owner/:repo/git/refs/:ref

例如:

$ curl https://api.github.com/repos/twitter/bootstrap/git/refs/heads/master

{
  "ref": "refs/heads/master",
  "url": "https://api.github.com/repos/twitter/bootstrap/git/refs/heads/master",
  "object": {
    "sha": "d991ef2ab1b4d156c7e5d33d052d66f8eaafc460",
    "type": "commit",
    "url": "https://api.github.com/repos/twitter/bootstrap/git/commits>/d991ef2ab1b4d156c7e5d33d052d66f8eaafc460"
  }
}

您可以在将其object.sha解析为 JSON 后提取,或者本着“hacky”的精神,通过管道:

| grep \"sha\": | cut -f4 -d\"

要得到:

d991ef2ab1b4d156c7e5d33d052d66f8eaafc460
于 2013-07-17T14:04:49.713 回答
0

这可能不是您想要的(不是 Java)。但是,使用基于 java 的 ssh-api和以下命令可以实现此目的。

git ls-remote git@github.com:<github username>/<git project name>.git

以下是示例输出:

4de51ba41fba357ac9ce63f098451cd1fc2dacbe        HEAD
4de51ba41fba357ac9ce63f098451cd1fc2dacbe        refs/heads/master
cc42dc12a972dab122030b046440f47e0485e321        refs/pull/1/head
73629fe86def6fef896abd32637b97fddf8cd3b4        refs/pull/1/merge

您当然可以通过在上述命令末尾附加所需的分支名称或 HEAD 来过滤它。

git ls-remote git@github.com:<github username>/<git project name>.git <branch-name>

或者

git ls-remote git@github.com:<github username>/<git project name>.git HEAD

于 2013-07-17T21:29:40.143 回答