当前位置:  开发笔记 > 编程语言 > 正文

将Git远程HEAD更改为指向除master之外的其他东西

如何解决《将Git远程HEAD更改为指向除master之外的其他东西》经验,为你挑选了7个好方法。

如何将Git遥控器的HEAD引用设置为指向除"master"之外的其他内容?

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

我的问题是远程存储库仍然有一个HEAD引用refs/heads/master,但我需要它指向一个不同的分支.这导致两个问题:

    克隆回购时,有这个,

    警告:远程HEAD是指不存在的ref,无法结帐.

    这令人困惑和不方便.

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

VonC.. 62

一年前GitHub上几乎有同样的问题.

我的想法是重命名主分支:

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

让主人拥有你想让人们使用的东西,并在分支机构中完成所有其他工作.

(a" git-symbolic-ref HEAD refs/head/published"不会传播到远程仓库)

这类似于" 如何在Git中删除origin/master ".


正如在这篇帖子中所说:(强调我的)

" git clone"只创建一个本地分支.
为此,它查看HEAD ref远程仓库的内容,并创建一个与其引用的远程分支同名的本地分支.

所以要包装它,你有repo A并克隆它:

HEAD引用refs/heads/master和存在
- >从origin/master开始,您将获得一个名为master的本地分支

HEAD引用refs/heads/anotherBranch和存在
- >从一anotherBranch开始就调用一个本地分支origin/anotherBranch

HEAD引用refs/heads/master并且不存在
- >"git clone"抱怨

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

(这是你问题的全部要点,我知道;))


也许唯一的方法就是"为穷人出版",你可以:

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

但这将涉及对服务器的写访问,这并不总是可行的.


正如我在" Git:在裸存储库中更改Active Branch的正确方法吗? "中解释的那样,git remote set-head不会改变远程仓库上的任何内容.

它只会更改本地仓库中本地存储的远程跟踪分支remotes//HEAD.



1> VonC..:

一年前GitHub上几乎有同样的问题.

我的想法是重命名主分支:

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

让主人拥有你想让人们使用的东西,并在分支机构中完成所有其他工作.

(a" git-symbolic-ref HEAD refs/head/published"不会传播到远程仓库)

这类似于" 如何在Git中删除origin/master ".


正如在这篇帖子中所说:(强调我的)

" git clone"只创建一个本地分支.
为此,它查看HEAD ref远程仓库的内容,并创建一个与其引用的远程分支同名的本地分支.

所以要包装它,你有repo A并克隆它:

HEAD引用refs/heads/master和存在
- >从origin/master开始,您将获得一个名为master的本地分支

HEAD引用refs/heads/anotherBranch和存在
- >从一anotherBranch开始就调用一个本地分支origin/anotherBranch

HEAD引用refs/heads/master并且不存在
- >"git clone"抱怨

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

(这是你问题的全部要点,我知道;))


也许唯一的方法就是"为穷人出版",你可以:

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

但这将涉及对服务器的写访问,这并不总是可行的.


正如我在" Git:在裸存储库中更改Active Branch的正确方法吗? "中解释的那样,git remote set-head不会改变远程仓库上的任何内容.

它只会更改本地仓库中本地存储的远程跟踪分支remotes//HEAD.



2> jrhorn424..:

更新:这仅适用于存储库的本地副本("客户端").请在下面查看其他人的评论.

使用最新版本的git(2014年2月),正确的程序将是:

git remote set-head $REMOTE_NAME $BRANCH

因此,例如,将远程头部切换origin到分支develop将是:

git remote set-head origin develop


仅适用于客户端(远程不知道此更改).
@Totor很简洁但是对; 这个答案应该被低估.Git有一个令人困惑的概念,即"远程的本地默认分支".它允许您键入"origin"而不是"origin/defaultbranch",并且是*纯客户端*事物.详情请访问https://git-scm.com/docs/git-remote#set-head

3> srcspider..:

既然你提到GitHub,要在他们的网站上进行,只需进入你的项目,然后......

admin > Default Branch > (choose something)

完成.


设置>分支>默认分支

4> 小智..:

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

这将在git存储库中设置默认分支.您可以在裸存储库或镜像存储库中运行它.

用法:

$ git symbolic-ref HEAD refs/heads/


$ git symbolic-ref HEAD refs/heads/name-of-branch

5> imz -- Ivan ..:

(已经有基本相同的问题" 在远程存储库中创建一个git symbolic ref ",但没有得到普遍的答案.)

但也有不同的git的"农场"一个具体的答案(其中多个用户可以通过限制接口管理git的回购协议:通过HTTP和SSH):http://Github.com,http://Gitorious.org,HTTP:/ /repo.or.cz,Girar(http://git.altlinux.org).

这些特定答案可能对阅读本页并考虑这些特定服务的人有用.

现在,他们有一个下拉菜单,用于在http://repo.or.cz上选择HEAD分支(例如:http://repo.or.cz/editproj.cgi?name = for-me-and-for- all_imz.git);

http://gitorious.org上(看看设置中的某个地方);

并在http://GitHub.com:admin >默认分支>(选择一些东西)(感谢@ srcspider的回答);

从v2.6开始,可以在"项目">"列表">"分支"下的Web界面中设置默认分支.在v2.12中,Gerrit 添加了一个可以在ssh上使用的新set-head命令.

Girar(运行在http://git.altlinux.org上为ALT的发行版构建软件包)中,可以使用ssh接口: $ ssh git.alt help | fgrep branch default-branch [] $ 例如ssh git.alt default-branch packages/autosshd.git sisyphus,将远程仓库中的HEAD更改autosshd.git为指向sisyphus分支.


现在,他们有一个下拉菜单,用于在http://repo.or.cz上选择HEAD分支(例如:http://repo.or.cz/editproj.cgi?name = for-me-and-for- all_imz.git)和http://gitorious.org.大!

6> squeegee..:

如果您可以从shell访问远程仓库,只需进入.git(或主目录,如果它是一个裸仓)并更改HEAD文件以指向正确的头.例如,默认情况下它总是包含'refs:refs/heads/master',但如果你需要foo作为HEAD,只需编辑HEAD文件并将内容更改为'refs:refs/heads/foo'.



7> kbro..:

您只需使用瓷器Git命令即可创建一个分离的分支:

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

这给了我们一个带有粗鲁信息的分支(你可能想要更有礼貌).现在我们创建我们的"真正"分支(让我们称之为主干以纪念SVN)并将其与master脱离:

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

嘿,presto! gitk --all将显示mastertrunk,它们之间没有链接.

这里的"魔力"是--amend导致git commit创建一个与当前HEAD具有相同父级的新提交,然后让HEAD指向它.但是当前的HEAD没有父级,因为它是存储库中的初始提交,因此新的HEAD也没有得到它,使它们彼此分离.

旧的HEAD提交不会被git-gc删除,因为refs/heads/master仍然指向它.

--allow空时,才需要标志,因为我们正在犯一个空的树.如果在git rm之后有一些git add,则没有必要.

实际上,您可以随时通过在存储库中分支初始提交,删除其树,添加分离的树,然后执行git commit --amend来创建分离的分支.

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

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有