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

Him*_*esh 3 git version-control

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

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

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

jub*_*0bs 5

使用git ls-remote --symref

您不需要克隆远程存储库来(以编程方式)识别该远程存储库中的当前分支。ls-remote有一个方便的选项,称为--symref

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

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

git ls-remote --symref <remote_repo_url> HEAD
Run Code Online (Sandbox Code Playgroud)

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

例子

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