如何从远程git存储库获取最新提交的SHA?

Adv*_*ser 54 git

有谁知道如何 git存储库外部获取给定分支的最新SHA ?

如果您在git存储库中,则可以执行以下操作:

git log origin/branch_X | head -1
Run Code Online (Sandbox Code Playgroud)

但是,我不在git存储库中,我想避免使用clone存储库来获取标记/分支的最新SHA.这样做有一个聪明的方法吗?

gpr*_*ant 90

使用rev-parse

git rev-parse origin/master # to get the latest commit on the remote

git rev-parse HEAD          # to get the latest commit on the local 
Run Code Online (Sandbox Code Playgroud)

  • 我认为如果您的本地仓库是最新的,git rev-parse origin/master只返回正确的答案.要证明这一点,请断开互联网并尝试; 命令会成功.相反,git ls-remote将失败,因为它试图联系远程仓库. (12认同)
  • 呃,不,它是`git fetch origin; git rev-parse origin/master`,获取不是非常重要吗? (4认同)
  • 问题说明"我想避免为了获得标签/分支的最新SHA而克隆存储库".是否可以对您没有本地信息的存储库使用`git rev-parse`? (2认同)

Jak*_*ski 64

如果要检查远程存储库中给定分支的SHA-1,那么您的答案是正确的:

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

但是,如果您使用相同的文件系统,则更简单的解决方案(不需要从输出中提取SHA-1)将简单地:

$ git --git-dir=/path/to/repo/.git rev-parse origin/branch_X
Run Code Online (Sandbox Code Playgroud)

有关' '选项的说明,请参阅git(1)联机帮助页--git-dir.


Adv*_*ser 28

我的一位同事为我回答了这个问题:

git ls-remote ssh://git.dev.pages/opt/git/repos/dev.git <branch>
Run Code Online (Sandbox Code Playgroud)

史蒂夫

  • 谢谢。这应该升级为该问题的答案。 (3认同)

dch*_*m4n 17

使用git URL:

$ git ls-remote <URL> | head -1 | sed "s/HEAD//"
Run Code Online (Sandbox Code Playgroud)

使用可访问系统上的目录:

$ git --git-dir=/path/to/repo/.git rev-parse origin/<targeted-banch>
Run Code Online (Sandbox Code Playgroud)

  • 为什么不使用`| awk '{ 打印 $1 }'`? (3认同)

ant*_*tam 14

这应该可以解决问题 git ls-remote REMOTE | awk "/BRANCH/ {print \$1}"

将REMOTE替换为远程存储库的名称,将BRANCH替换为分支的名称.


kit*_*ris 12

如上面的评论所述,这应该是最好的解决方案:

$ git ls-remote <URL> | head -1 | cut -f 1