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

Git:更改裸存储库中活动分支的正确方法?

git
  •  178
  • kbro  · 技术社区  · 15 年前

    我有一个空的存储库,用作我的项目的中心存储。所有的开发人员都这么做 git clone <repo> 分享。当他们进行克隆时,他们得到主分支的一个签出(除非他们这样做 git clone -n 因为 repo.git/HEAD 包含 ref: refs/heads/master ,使其成为 活动支路 .

    问题是,我如何改变 活动支路 合适吗?我可以简单地破解 吉特/头 直接归档,但这看起来很糟糕,嗯,很糟糕。

    我试着做 git checkout <otherbranch> 回购中 .git 目录,但是失败了,因为我不在工作树中。

    我试过 git update-ref HEAD refs/heads/otherbranch 但这只是更新了refs/heads/master,使其与refs/heads/otherbranch相同(好吧,我是在虚拟存储库中完成的,而不是在我的产品存储库中完成的!)

    我试过 git update-ref --no-deref HEAD refs/heads/otherbranch 这几乎奏效了。它更新了 HEAD 文件,但它将其设置为 refs/heads/otherbranch .

    我正在测试Git版本 1.7.0.2.msysgit.0 .

    我想没办法解决这个问题 git push ,因为允许所有和杂项更改默认分支似乎有点不安全!!)但是在回购协议中肯定有更好的方法 Git 目录比直接黑客 文件。

    5 回复  |  直到 7 年前
        1
  •  256
  •   Community GoutamS    8 年前

    如果您可以访问远程裸机回购,那么 article suggests :

    git symbolic-ref HEAD refs/heads/mybranch
    

    它将更新存储库中的头文件,使其包含:

    ref: refs/heads/mybranch
    

    git-symbolic-ref


    如果您无法访问远程回购,请参阅 my previous answer .


    记住一个命令 git remote set-head :

    • 不更改的默认分支 遥远的 回购协议。
      它只改变了 远程跟踪分支 存储在你的 地方的 回购协议 refs/remotes/<name>/HEAD

    • 不会改变 HEAD 本身(同样,只有 refs/remotes/<名称>/head ,因此需要 git symbolic-ref .

    所以 Git远程设定头 不是 答案在这里。
    git symbolic-ref HEAD 是,如果您可以直接访问远程回购。

        2
  •  2
  •   Thymine    7 年前

    要更改分支,需要更改要使用的分支的头引用。

    首先,通过执行以下操作列出裸存储库中的所有引用:

    $find ref
    

    然后查找分支的引用,格式如下 refs/heads/<my_branch> . 所以下一步是检查当前引用,只需键入:

    $git symbolic-ref HEAD
    

    所以您知道哪个是当前分支,然后根据需要更新它。

    $git sumbolic-ref HEAD ref/heads/<my_branch>
    

    汤姆。享受。

        3
  •  -1
  •   Community GoutamS    8 年前

    此外,如果您没有访问裸机存储库的权限,请执行 git remote set-head 你就完了

    查看上一个 response

        4
  •  -3
  •   Mi-Creativity    9 年前

    我在我们的服务器上也有一个空的repo,并且能够使用

    git clone //server/repo/directory -b branch_name
    

    到一个新的本地存储库中,即使手册页上说这只适用于非裸机存储库。

        5
  •  -4
  •   boryn    14 年前

    我在应用前后比较了两个目录

    git symbolic-ref HEAD refs/heads/mybranch

    而且似乎只有repo.git/head文件被更改了,所以仅仅“黑客”该文件可能是相当安全的。