7

我有一个本地存储库,我通过git clone --mirror <ssh-url>. 然后我使用git remote update --prune.

此时,HEAD指向refs/heads/master

然后我转到我的 github 存储库的 Admin 部分,并更改默认分支。我所有的分支都照常更新,但 HEAD 仍然是refs/heads/master(是的,分支有不同的哈希值)

我目前的想法是使用git ls-remote获取 HEAD 和所有分支的哈希,然后使用一些 grep/awk 魔术,提取 HEAD 的哈希,然后选择具有匹配哈希的第一个分支,并用于git symbolic-ref HEAD <found branch name>在本地设置它。

但是有没有更简单的方法来获取远程HEAD分支名称(以可以在脚本中更新的方式)?

4

4 回答 4

2

是的,有一个命令:

git remote set-head origin -a

来自git help remote

使用 -a,查询远程以确定其 HEAD,然后将 symbolic-ref refs/remotes/<name>/HEAD 设置为相同的分支。例如,如果远程 HEAD 指向 next,“git remote set-head origin -a”会将符号引用 refs/remotes/origin/HEAD 设置为 refs/remotes/origin/next。这只有在 refs/remotes/origin/next 已经存在时才有效;如果不是,则必须先获取它。

于 2013-03-07T08:37:02.870 回答
0

有没有更简单的方法来获取远程 HEAD 分支名称

git ls-remote --symref origin HEAD

并且您可以直接使用 url 或路径而不是远程名称,例如,您可以git ls-remote --symref . HEAD以一种相当壮观的迂回方式获取本地结帐。

于 2020-07-08T21:05:18.030 回答
-1

要查询远程 HEAD,请使用

git remote show origin
* remote origin
  Fetch URL: git://...
  Push  URL: git://...
  HEAD branch: whateverremotehead
  Remote branches:
    ...

并解析输出,寻找“HEAD 分支”,并在

git symbolic-ref HEAD refs/heads/whateverremotehead

我不知道有什么更好的方法。

于 2014-08-03T14:26:20.160 回答
-1

由于您使用的是 ssh,因此如果您具有适当的 ssh 访问权限,则可以使用此命令:

scp yourusername@yourserver:/path/to/the/server/repo/HEAD local/repo/.git/HEAD
于 2013-03-07T18:50:49.837 回答