如何更新镜像克隆中的HEAD分支?

时间:2013-03-05 15:11:25

标签: git github

我有一个本地存储库,我通过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 个答案:

答案 0 :(得分:2)

是的,有一个命令:

git remote set-head origin -a

来自git help remote

  

使用-a,查询远程以确定其HEAD,然后查询   symbolic-ref refs / remotes // HEAD设置为同一个分支。例如。,   如果遥控器              HEAD指向下一步,“git remote set-head origin -a”将symbolic-ref refs / remotes / origin / HEAD设置为   参/遥控器/产地/下一张。这将              只有当refs / remotes / origin / next已经存在时才有效;如果没有,必须先取出。

答案 1 :(得分:0)

要查询远程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

我不知道有什么好办法。

答案 2 :(得分:0)

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

git ls-remote --symref origin HEAD

,您可以直接使用url或路径来代替远程名称,例如git ls-remote --symref . HEAD以一种非常引人入胜的回旋方式进行本地结帐。

答案 3 :(得分:-1)

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

scp yourusername@yourserver:/path/to/the/server/repo/HEAD local/repo/.git/HEAD