如何使用类似curl的命令获取远程仓库的最后一个提交ID?

Man*_*uma 48 git git-commit

我想获取远程 git repo 的最后一个提交ID .

该命令git rev-parse HEAD适用于本地克隆的git repo,但我希望通过CURL命令从原始的GIT repo中获取它.

例如:我想获取git URL的最后一个提交ID https://git.appfactorypreview.wso2.com/history/apiapp.git/.

怎么样?

Lit*_*mus 84

试试这个命令

git log --format="%H" -n 1
Run Code Online (Sandbox Code Playgroud)

  • 你可以通过`git log --format ="%H"-n 1`删除管道 (8认同)
  • ````git log -n1 --format ="%h"```提供缩写的提交哈希. (8认同)
  • 这是错的.在git 2.1.4中,"%H"显示本地提交ID,而不是远程. (4认同)
  • 这个问题确实被修改了,但只是为了可读性。OP 明确表示他没有本地克隆,他想使用类似 `curl` 的解决方案。 (3认同)
  • 您在哪里指定远程 URL? (2认同)

Joh*_*ter 30

我想你想要的是这个:

git ls-remote $URL HEAD
Run Code Online (Sandbox Code Playgroud)

如果HEAD远程存储库中不存在,那么您可能需要:

git ls-remote $URL refs/heads/master
Run Code Online (Sandbox Code Playgroud)

请注意,在第一个实例中,HEAD将指向要在存储库中签出的默认分支.你需要确定你想要的分支,或者只是使用第二个表单并指定你想要的refs/heads/master那个(用你想要的分支名称替换:refs/heads/BRANCH_NAME.

  • 它*从不*存在是不正确的。案例和要点:`git ls-remote git://github.com/jszakmeister/vimfiles.git HEAD`。在一个裸仓库中,它告诉 Git 将哪个分支检出作为默认分支。确实,您不能指望它存在。因此,在这种情况下,您应该使用适当的引用名称。我会更新我的答案。 (2认同)

bru*_*ton 14

Another way, without using git log:

git rev-parse HEAD


sil*_*vio 13

你可以用git ls-remote它.因为我得到一个'Unauthorized access for repository apiapp.git'我用例如torvalds linux-repo.

$ git ls-remote --heads git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
6d15ee492809d38bd62237b6d0f6a81d4dd12d15        refs/heads/master
Run Code Online (Sandbox Code Playgroud)


rou*_*ble 7

最后一个提交 id 的短散列更易于人类阅读(阅读:用户友好)。对于后代,有两种方法可以获取最后一次提交 ID 的短哈希值:

git rev-parse --short HEAD
Run Code Online (Sandbox Code Playgroud)

或者

git log -n1 --format="%h"
Run Code Online (Sandbox Code Playgroud)


cod*_*sme 6

我使用的最简单的方法:

git rev-parse origin/develop
Run Code Online (Sandbox Code Playgroud)


mar*_*omo 5

我的回答对OP没有帮助,因为他不在github上,但我想我无论如何都会提到它,因为它按照OP的要求使用curl, 或。wget

wget -qO- http://api.github.com/repos/Ghini/ghini.desktop/commits/ghini-1.0

Ghini是我的存储库,ghini.desktop是我的存储库,ghini-1.0是我感兴趣的分支。替换它们以适合您的情况。

JSON答案是一本字典,OP对其领域感兴趣sha,但它包含更多信息。