分支机构缺失将存储库转换为裸机

时间:2014-06-24 10:13:56

标签: git git-branch

我有一个包含许多分支的存储库。 e.g。

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

使用此处找到的方法将其转换为裸存储库:How to convert a normal Git repository to a bare one?

在裸存储库中,运行相同的命令" git branch -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 个答案:

答案 0 :(得分:1)

他们并没有真正“失踪”:他们故意 没有被带入新的克隆。

另一种说法是,您的裸存储库只有一个分支master。您看到的其他内容(remotes/origin/branch1等)不是分支,它们是“远程分支”。 (遗憾的是,这些名称相似。您可以使用“本地”一词来限定本地分支,以区别于“远程分支”。另外一种方法是克隆仅复制本地分支。 )

请记住,每个克隆都是一个独立的git存储库。 1 这个想法是你制作这个克隆然后自己修改它。您的更改完全属于您的更改,直到您决定发布(共享)它们为止。所以你的克隆就是你正在克隆的东西的副本,但随着你自己的工作而改变。

您是否更改 副本,在某些时候您可能想要获取其他人发布(共享)的更改。这就是git的“远程分支”的用武之地。您的私有存储库副本将拥有您自己的个人本地分支,这些分支由创建和维护。但无论你从最初复制的地方,即origin也是一个独立的存储库。你复制的人 - 让我们称这个人为鲍勃,只是为了让他有一个名字 - 可能已经做了一些改变然后决定允许你分享它们。要获取Bob的更改,您可以在 副本中放置一组“远程分支”,以跟踪Bob的存储库分支的位置。

这些是您看到的remotes/origin/分支,例如remotes/origin/master。显然,您已经或至少已经访问过Bob的存储库,因为您克隆了它来创建您的存储库。因此,您的git存储库会在远程名称origin(克隆的来源)下记录Bob的URL。

让我们说其他人,例如Clara,现在克隆您的存储库。她将获得她的“远程分支”,您的(本地)分支机构。她没有得到Bob的分支,因为Clara没有复制Bob的存储库。她只是获取您的分支,在她的存储库中,它位于remotes/origin/下。她得到你的 master并将其称为remotes/origin/master。这与您的 remotes/origin/master无关,您和您的克隆用于跟踪Bob在Bob master中的工作。

如果您使 存储库获取所有Bob的更改,并将所有Bob的更改集成到您的本地分支中,那么此时Clara可以选择您的分支,这与Bob的分支相同,因此赶上Bob。但她是通过你做到的。

如果克拉拉意识到鲍勃存在并决定直接拿起他的东西,她可能会在她的克隆中记录另一个遥控器。假设她称之为远程bob

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

Clara现在可以git fetch bob运行联系Bob的系统并选择他当地的分支机构。在她的git存储库中,这些将被称为remotes/bob/:例如,她将获得remotes/bob/master。然后,Clara可以比较 存储库中的remotes/bob/masterremotes/origin/master,看看您是否一直将您的大师与Bob的{{1}保持同步}:她的master是您上次与您重新同步的remotes/origin/master的副本,而她的master是Bob remotes/bob/master的副本。上次她与鲍勃重新同步。

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


1 至少,独立于原则。您可以制作基本上不完整的“浅”克隆。它们仍然是独立的,它们只是具有向后引用,如果不首先联系另一个存储库就无法解析,以“加深”副本。非浅层(“完全深入”,但实际上)克隆拥有一切,并且是真正独立的。