我有一个本地存储库,我通过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
分支名称(以可在脚本中更新的方式)?
答案 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