如何设置一个混帐远的头参考点以外的东西的"主人"?

我的项目的政策不是使用"主要"分(所有分支机构都具有有意义的名称)。此外,该规范主存储库只能通过ssh://,没有外壳的访问(如审查或Unfuddle).

我的问题是,远程存储库仍然有一头参考文献/头/掌握的,但我需要它来指向一个不同的分支。这引起两个问题:

  1. 当克隆的回购,有这个,

    警告:远程头是指不存在的裁判,无法结帐。

    这就是混乱和不方便的。

  2. 基于网络的代码浏览器上取决于头为基础,浏览的树。我需要头指向一个有效的分支,然后。

有帮助吗?

解决方案

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

当时的想法是重新命名主分支机构:

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

使master具有你想要什么人们使用,并做到所有其他工作分支。

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

这是类似"我怎么删除原籍国/母在Git".


正如所述在 这个线程:(重点矿山)

"git clone"仅创建一个单一的地方分支。
要做到这一点,它看起来的 HEAD ref 远程仓库,并创建一个地方分支有相同的名称为偏远的分支所引用的。

这样包起来,你必须回购和克隆:

  • HEAD 参考文献 refs/heads/master 和的存在
    -你得到一个当地的分支称为主,开始从原籍国/母

  • 头参考文献 refs/heads/anotherBranch 和的存在
    -你得到一个当地的分支称为 anotherBranch, 开始从 origin/anotherBranch

  • 头参考文献 refs/heads/master 并不存在的
    ->"混帐克隆"抱怨

不知道是否有任何方式直接修改的 HEAD ref在一个仓库.

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


也许 唯一的办法将是一个 "出版物的穷人",你在哪里:

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

但是,这将涉及写入服务器,这是不是总是可能的。


正如我在解释"文件正确的方式改变主动支在一个裸仓库?", git remote set-head 不会改变什么的远回购。

这只会改变的远程跟踪分储存在本地在当地的仓库, remotes/<name>/HEAD.

其他提示

更新: 这仅适用于在当地拷贝的储存库("客户").请见其他人的评论意见如下。

最近的版本录(Feb2014年),正确的程序将是:

git remote set-head $REMOTE_NAME $BRANCH

因此,例如,交换头上的远程 origin 分支 develop 将是:

git remote set-head origin develop

因为你说想,要做到这在他们的站点只需走进你的项目,然后...

admin > Default Branch > (choose something)

完成。

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

这套缺省分支的仓库的内容。你可以运行,这在裸露镜像存储库。

使用:

$ git symbolic-ref HEAD refs/heads/<branch name>

(已经有基本上相同的问题"创建一个混帐象征性的参考在远程数据库",它没有收到普遍的答复。)

但有一个具体的答案的各种混帐"农场"(其中多个用户可以管理它涵盖通过受限制的接口:通过http与ssh): http://Github.com, http://Gitorious.org, http://repo.or.cz, Girar (http://git.altlinux.org).

这些具体的答案可能是有用的那些读到这页,并思考这些特定服务。

如果你有机会获得远程回购从一个壳,刚进入。git(或者主dir如果它是一个裸露的回购)和更改头文件要点的正确头。例如,默认情况下,它总是包含的'裁判:裁判/头/master',但是如果你需要foo的头,而不是,只是编辑头的文件和变化的内容的'裁判:裁判/头/foo'.

你可以创建一个独立的 支使用只瓷内容:

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"

嘿,看! gitk--所有 将显示 树干 没有它们之间的联系。

"魔法"在这里是 --修改 的原因 git的承诺 创建一个新的提交与相同的父母为目前的头,然后点头。但是,当前的头没有父母作为它的最初承诺在储存库中,因此新头没有得到一个任,使他们脱离。

老头承诺并没有得到删除 混帐gc 因为裁判/头/主仍点。

-让空 标志仅仅是必要的,因为我们是犯了一个空树。如果有一些 git加's后 git rm 然后它就不是必要的。

说实话,您可以创建一个独立的分支在任何时间通过分支的最初承诺在储存库中,删除其树,加入你的独树,然后在做 git提交的修订--.

我知道这不会回答这个问题的如何修改的缺省分支的远程存储库,但是它提供了一个干净的回答关于如何建立一个独立的分支。

第一,创造新的分支,你想来设定作为默认,例如:

$>git branch main

接下来,推动这一分支 来源:

$>git push origin main

现在,当登入你的想账户,你可以去到你的仓库和选择设定>的默认支和选择"."

然后,如果你选择这样做,可以删除主分支机构:

$>git push origin :master

为gitolite人,gitolite支持的一种命令被称为--等等-- symbolic-ref.它可以让你运行该命令的远程如果你有W(编写)的权限的回购。

有关这个问题,我结束了在这里时,搜索:

我如何做一个地方仓库中认识到一个改变了的默认支上。

为完整起见,添加了答案:

git remote set-head origin -a

简单只要登录进你的审查账户,并在右侧导航菜单中选择 设置, 在 设置标签 选择 默认的分支 并返回到主页你仓库里没有欺骗我。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top