代码之家  ›  专栏  ›  技术社区  ›  JasonSmith

将Git远程头更改为指向除master之外的其他对象

  •  114
  • JasonSmith  · 技术社区  · 15 年前

    如何设置Git remote的头引用以指向除“master”之外的其他对象?

    我的项目有一个不使用“主”分支的策略(所有分支都有有有意义的名称)。此外,规范主存储库只能通过ssh://访问,没有shell访问(如GitHub或Unfuddle)。

    我的问题是远程存储库仍然有一个指向refs/heads/master的HEAD引用,但我需要它指向另一个分支。这造成了两个问题:

    1. 警告:远程标头引用了不存在的ref,无法签出。

      这既混乱又不方便。

    2. 基于web的代码浏览器依赖于HEAD作为浏览树的基础。我需要头部指向一个有效的分支,然后。

    10 回复  |  直到 11 年前
        1
  •  64
  •   VonC    4 年前

    几乎是最后一次 same question on GitHub 一年前。

    git branch -m master development
    git branch -m published master
    git push -f origin master 
    

    让master拥有您希望人们使用的东西,并在分支中完成所有其他工作。

    git-symbolic-ref HEAD refs/head/published

    这类似于“ How do I delete origin/master in Git ".


    如中所说 this thread :(我的重点)

    " git clone “仅创建一个本地分支。
    要做到这一点,它需要考虑 HEAD ref 创建一个本地分支,其名称与其引用的远程分支相同。

    最后,你有回购协议 A 并克隆它:

    • HEAD refs/heads/master 这是存在的
      master origin/master

    • 标题参考 refs/heads/anotherBranch
      -&燃气轮机;你有一个叫 anotherBranch origin/anotherBranch

    • 标题参考 参考/主管/主管
      ->” git克隆

    不确定是否有任何方法可以直接修改 回购协议中的ref .

    (我知道,这是你问题的重点;)


    大概 唯一的办法是一个 "publication for the poor" ,你可以:

     $ git-symbolic-ref HEAD refs/head/published
     $ git-update-server-info
     $ rsync -az .git/* server:/local_path_to/git/myRepo.git/
    

    但这涉及到对服务器的写访问,这并不总是可能的。


    正如我在“中所解释的” Git: Correct way to change Active Branch in a bare repository? ", git remote set-head 不会改变远程回购协议的任何内容。

    它只会更改本地存储在本地回购中的远程跟踪分支 remotes/<name>/HEAD .


    使用Git 2.29(2020年第4季度),” git remote set-head ( man )

    看见 commit 5a07c6c (2020年9月17日)由 Christian Schlack ( cschlack )
    Junio C Hamano -- gitster -- commit 39149df

    remote :不显示成功消息时 set-head 失败

    签字人:克里斯蒂安·施拉克

    出现错误时,禁止显示消息“原点/磁头设置为主”。

    $ git remote set-head origin -a
    error: Not a valid ref: refs/remotes/origin/master
    origin/HEAD set to master
    
        2
  •  45
  •   jrhorn424    8 年前

    git remote set-head $REMOTE_NAME $BRANCH

    例如,在遥控器上切换头部 origin develop 将是:

    git remote set-head origin develop

        3
  •  36
  •   srcspider    13 年前

    既然你提到GitHub,在他们的网站上做这件事只需进入你的项目,然后。。。

    admin > Default Branch > (choose something)

    完成。

        4
  •  16
  •   selurvedu    6 年前

    见: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html

    这将设置git存储库中的默认分支。您可以在裸存储库或镜像存储库中运行此功能。

    用法:

    $ git symbolic-ref HEAD refs/heads/<branch name>
    
        5
  •  10
  •   MarcH rhardih    8 年前

    create a git symbolic ref in remote repository “,没有得到普遍的回答。)

    但对于各种git“农场”(多个用户可以通过受限接口(通过http和ssh)管理git回购)有一个具体的答案: http://Github.com http://Gitorious.org , http://repo.or.cz , Girar ( http://git.altlinux.org ).

    这些具体的答案可能对阅读本页并思考这些特定服务的人有用。

        6
  •  7
  •   squeegee    13 年前

    如果您可以从shell访问远程repo,只需进入.git(如果是裸repo,则进入main dir)并将HEAD文件更改为指向正确的HEAD。例如,默认情况下,它始终包含“refs:refs/heads/master”,但如果需要将foo改为HEAD,只需编辑HEAD文件并将内容更改为“refs:refs/heads/foo”。

        7
  •  6
  •   kbro    14 年前

    您可以创建一个分离的 主人 仅使用Git命令进行分支:

    git init
    touch GO_AWAY
    git add GO_AWAY
    git commit -m "GO AWAY - this branch is detached from reality"
    

    这给了我们一个机会 主人 用粗鲁的话语打断对方(你可能需要更有礼貌)。现在我们创建“真实”分支(我们称之为 大旅行箱 为了纪念SVN)并将其与 主人 :

    git checkout -b trunk
    git rm GO_AWAY
    git commit --amend --allow-empty -m "initial commit on detached trunk"
    

    嘿,普雷斯托! 将显示 主人 大旅行箱 他们之间没有联系。

    这里的“魔力”是 原因 git提交

    旧头提交不会被删除 git gc 因为refs/heads/master仍然指向它。

    这个 只需要标记,因为我们正在提交一个空树。如果有的话 git添加 那是在 那就没有必要了。

    实际上,您可以随时创建分离的分支,方法是在存储库中对初始提交进行分支,删除其树,添加分离的树,然后执行以下操作 .

    我知道这并没有回答如何修改远程存储库上的默认分支的问题,但它给出了如何创建分离分支的清晰答案。

        8
  •  4
  •   friederbluemle    5 年前

    如何使本地回购知道GitHub上已更改的默认分支

    为完整起见,添加以下答案:

    git remote set-head origin -a
    
        9
  •  2
  •   4mnes7y    12 年前

    首先,创建要设置为默认值的新分支,例如:

    $>git branch main

    下一步,将该分支推到 起源

    $>git push origin main

    现在,当您登录到GitHub帐户时,您可以转到存储库并选择设置>默认分支并选择“ ."

    然后,如果选择此选项,则可以删除主分支:

    $>git push origin :master

        10
  •  0
  •   Nilesh    12 年前

    symbolic-ref . 如果您对repo拥有W(write)权限,它允许您远程运行该命令。

        11
  •  -1
  •   Matija    12 年前

    设置 设置选项卡 选择 默认分支