获取远程仓库中HEAD指向的分支名称,无需克隆远程

问题描述 投票:0回答:2

我目前正在寻找一种解决方法来检索远程存储库 HEAD 指向的分支名称。我不想克隆存储库。

我直接需要一些 git 命令来检索 HEAD 分支名称。我试过 下面的命令,但它只提供 SHA 提交哈希 HEAD,但我想要分支名称。

git ls-remote ssh://git.dev.pages/opt/git/repos/dev.git <branch>
git version-control
2个回答
5
投票

使用
git ls-remote --symref

您不需要克隆远程存储库来(以编程方式)识别该远程存储库中的当前分支。

ls-remote
有一个方便的选项,称为
--symref
:

在显示符号引用时,除了它指向的对象之外,还显示它指向的底层引用。目前,upload-pack 仅显示 symref HEAD,因此它将是 ls-remote 显示的唯一一个。

有了这些知识,你就可以简单地运行

git ls-remote --symref <remote_repo_url> HEAD

并使用一些

sed
-foo 提取当前分支的名称;因为
ls-remote
被归类为“管道”Git 命令,因此您可以在脚本中安全地使用它。

示例

$ git ls-remote --symref https://github.com/Jubobs/gitdags HEAD | \
    head -1 | \
    awk '{print $2}'
refs/heads/master

1
投票

使用

--symref
选项。输出显示
HEAD
指向
master

> git ls-remote --symref https://github.com/git/git-scm.com.git HEAD
ref: refs/heads/master  HEAD
df55dcad82c2aa8dd7760aadf92b132af1deb8ec        HEAD

简洁的语法是

git ls-remote --symref <repository> <refs>


旁白:如果您已经克隆了存储库,则只需运行

git branch -a
即可。例如,如果其输出包含
remotes/origin/HEAD -> origin/xxx
,则远程 HEAD 指向分支
xxx

© www.soinside.com 2019 - 2024. All rights reserved.