2014-06-24 45 views
0

我有一个存储库,其中包含多个分支。例如分支丢失将存储库转换为裸机后

git --branch -a 
*master 
remotes/origin/HEAD -> origin/master 
remotes/origin/branch1 
remotes/origin/branch2 
remotes/origin/master 

Iconverted它用在这里找到方法的纯仓库:How to convert a normal Git repository to a bare one?

在纯仓库,运行相同的命令“混帐分支-a”,所有的分支列出。

git --branch -a 
*master 
remotes/origin/HEAD -> origin/master 
remotes/origin/branch1 
remotes/origin/branch2 
remotes/origin/master 

一旦我从裸仓库中克隆,分支就不见了。运行git --branch -a显示:

git clone git-server git-local 
cd git-local 
git --branch -a 
*master 
remotes/origin/HEAD - origin/master 
remotes/origin/master 

有什么我失踪了吗?我如何获得分支机构?

回答

1

他们不是真的“失踪”:他们故意没有采取新的克隆。

另一种方法来说这是你的裸仓库只有一个分支master。你看到的其他东西(remotes/origin/branch1等)不是分支,它们是“远程分支”。 (这些名字很不幸地是相似的,你可以使用“本地”一词来限定本地分支机构,以便将它们与“远程分支机构”区分开来,所以另一种方式是复制本地分支机构。请记住,每个克隆都是独立的git存储库。 这个想法是,你做这个克隆,然后自己修改它。直到您决定发布(共享)它们,您的更改完全是您的更改。所以你的克隆起初是作为你克隆的东西的副本,但随着你做自己的工作而变得更改。

无论您是否更改您的副本,在某些时候您可能想要选择其他人发布(共享)的更改。这是git的“远程分支机构”进来的地方。您的私人存储库副本将拥有您自己的个人本地分支机构,这些分支机构最多可以创建和维护。但是,无论你从最初拷贝到哪里,即origin -is 也都是的独立存储库。你复制的人 - 让我们称这个人为鲍勃,让他拥有一个名字 - 可能已经做了一些改变,然后决定让你分享它们。为了选择Bob的更改,您将副本放在副本中,这是一组“远程分支”,用于跟踪Bob的存储库分支所在的位置。

这些是您看到的remotes/origin/分支,如remotes/origin/master。很明显,你有或至少有权访问Bob的存储库,因为你使用来创建你的存储库。因此,您的git存储库会记录Bob的远程名称origin(您的克隆的起源)的URL。

比方说,其他人,例如克拉拉,现在克隆您的存储库。她将获得她的“远程分支机构”,你的(地方)分支机构。她没有得到Bob的分支,因为Clara没有复制Bob的存储库。她只是获得您的分支机构,在她的存储库中,该分支机构的生存时间为remotes/origin/。她获得您的master并称之为remotes/origin/master。这与remotes/origin/master无关,您和您的克隆用于跟踪Bob在Bob的master中的工作。

如果您库拿起所有Bob的变化,所有的Bob的变化融入当地分支,然后在该点克拉拉可以拿起你的分支,这是一样的Bob的树枝,从而赶上鲍勃。但她通过你做到了。

如果克拉拉意识到鲍勃存在并决定直接拿起他的东西,她可能会在她的克隆中录制另一个遥控器。比方说,她远程bob调用此:

$ git remote add bob ssh://whatever... # whatever URL is appropriate 

克拉拉现在可以运行git fetch bob联系Bob的系统,并拿起他的地方分支机构。在她的git仓库中,这些将被称为remotes/bob/:例如,她将获得remotes/bob/master。然后克拉拉可以比较remotes/bob/masterremotes/origin/master库,看看你是否一直保持主最新Bob的master:她remotes/origin/master是你master作为最后一次与你她重新同步的副本,而她的remotes/bob/master是Bob上一次与Bob重新同步的Bob的master的副本。

总之,克隆不复制remotes/分支,因为这没有意义。克隆人可以访问您的存储库 - 他们正在克隆的存储库 - 并且通常不关心您的存储库是否可以访问某个其他存储库。他们只关心你的分支 - 至少,直到他们添加更多的遥控器。


至少,独立原则性。您可以制作基本上不完整的“浅”克隆。这些仍然是独立的,它们只是具有向后引用,如果不先联系另一个存储库,就无法解决这个问题,从而“深化”副本。一个非浅的(即“完全深入”)克隆虽然具有一切,但它是真正独立的。

+0

谢谢你。我明白现在发生了什么事。我已经提出了另一个更好地解释我的情况的问题。 –

相关问题