我有一个包含许多分支的存储库。 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
我有什么遗失的吗?我如何让分支回来?
答案 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/master
和remotes/origin/master
,看看您是否一直将您的大师与Bob的{{1}保持同步}:她的master
是您上次与您重新同步的remotes/origin/master
的副本,而她的master
是Bob remotes/bob/master
的副本。上次她与鲍勃重新同步。
简而言之,克隆不会复制master
分支,因为这没有意义。制作克隆的人可以访问您的存储库 - 他们正在克隆的存储库 - 并且通常不关心您的存储库是否可以访问其他存储库。他们只关心你的分支 - 至少,直到他们添加更多的遥控器。
1 至少,独立于原则。您可以制作基本上不完整的“浅”克隆。它们仍然是独立的,它们只是具有向后引用,如果不首先联系另一个存储库就无法解析,以“加深”副本。非浅层(“完全深入”,但实际上)克隆拥有一切,并且是真正独立的。