2011-04-04 115 views

回答

11

你的问题并没有太大的意义。存储库始终包含至少一个分支,并且不存在没有存储库的分支。所以当然,分支比储存库小。这两者并不是真正可比的东西。

因此,让我们来谈谈一下Git仓库实际包含的内容。有几个主要的事情:

  • 工作树 - 这是所有的文件,你的工作的那些当前状态。这可能占用相当大的空间。

  • 对象 - 这些都是内部的方式混帐东西专卖店 - 斑点代表的文件,树代表目录结构的内容,提交代表工作树的快照。这是真正需要空间的另一件事。

  • refs - 参考文献的简写:分支或标签。这些非常非常轻量级 - 它们只是指向特定提交的指针。他们确实占用了一点空间,但却很少,您应该将它们视为完全免费。标签是固定的参考;他们永远指向一个提交,并用于标记版本等。分支是可移动的引用;一个被检出,随着你的提交,它向前发展。它们就是你用来表示开发线的一个部分 - 一个稳定的分支,一个针对特定错误修复或功能的分支,你将其命名。

.git目录中除了对象和引用之外还有其他的东西,但现在不用多关心它们。

如何跟踪错误修复(我们正在使用Jira)?你怎么知道哪个分支或存储库有错误修复?

这是由你自己决定的。通常人们最终会在他们的提交信息中嵌入一些信息,以表明他们解决了某些特定的错误/问题。您可能应该有一个定义的工作流程,您可以在自己的分支上进行错误修正(或者可能是以前版本的维护分支),然后将它们合并到当前的开发分支中,从而与未来版本共享错误修复。你应该能够说出类似于“主分支和维护分支始终具有所有错误修复”的内容 - 尽管如果你想检查,你可以执行类似git log --grep='bug 1234'的操作,假设你已经将该字符串放入了提交消息中!

通常,不需要在同一个项目的存储库中有多个克隆。你可能会有一个中心问题,每个开发人员都有自己的问题 - 但是当开发人员发布他们的工作时,他们会将其放在中心位置,这就是重要的一切。

2

对我来说,存储库应该包含一个独特的项目。分支是该项目发展的“途径”。所以你可能有一个开发分支,一个生产分支,一些功能分支和一些错误修复分支。分支机构可以根据需要相互合并,最终合并为开发和生产。

磁盘空间:整个存储库比创建分支要大,因为分支首次创建时实际上只是一个指针,而整个存储库需要重新存储所有的git文件。

+1

如果您的克隆回购软件位于同一磁盘上并使用硬链接,则可能无法使用更多的空间。不仅仅是一个指针,这是所有分支使用的指针,但不一定是所有文件的副本。 – bstpierre 2011-04-04 19:45:41

+0

我问的原因是因为我最近参加了一些git培训,并且教师显示了有2个回购的工作流程。一个是在主分支上进行开发。这个回购是建立和测试,然后提交被推入“黄金”回购供QA使用。我们正试图将使用此模型的原因与使用分支进行对比。感谢大家的意见。我像往常一样学习很多东西。 :-) – user561638 2011-04-05 14:00:31

4

一个分支在同一个仓库里总是花费几乎没有任何东西要创造(从技术上讲,这取决于你在分支中放置什么,但我确定这是清楚的开始)。

当克隆回购,你结束了两倍的存储需求(无论是在包装和工作树)。但是,这可能会导致您相信克隆存储库必然是不理想的事情。让我告诉你为什么这并非总是如此/

一个回购实际上只是分支裁判的集合。一个分支实际上(如在深度复制中)需要和回购一样多,除了特定分支的提交中的blob。 (通常没有太大的差异)。

在本地,你可以克隆一个回购实际上没有额外的成本,因为它可以被硬链接(在相同的文件系统中)。另外,通过克隆到裸仓库可以避免另一棵工作树所产生的成本(例如,通过使用git clone --mirror)。

中的项目

在我看来,回购相当于分布式工作流一个“球员”。玩家可以是“自然人”或“角色代理人”。我有

  • 中央回购
  • 工作回购(每个工作站一个(与网络的连接,以便我可以从任何地方推拉工作);与与ProofOfConcept-ING相关,合并短暂和临时的分支,微提交等)
  • 备份回购
  • [也许github上克隆用于拉请求如果上游开发者是在github]

在实践中只有3-4类型的分支被ACROS共享所有回购(主,主要,测试,不稳定)。

外的项目

当然,一期工程西港岛线有它自己的回购协议(大部分时间)。我开始倾向于使用子模块,因为它似乎比异构分支更灵活(即不同的项目在同一回购的独立分支)

有一个单一回购协议的一大好处是,它将非常顺利地将其相关的工作树从一个分支切换到另一个分支。

  • 可以将其作为远程
  • 您可以将您的工作树从另一个存储库中的分支,你可以有一个独立的(甚至是裸)的回购协议:为了公平对待这种差异可以在两个方向进行加工arounnd通过覆盖GIT_WORKTREE环境变量与“非本地”工作树工作

你看,当你看它这样,回购开始是分支的集合,具有或多或少convential协会到单个工作树。这些约定是真正的差异出现的地方:你通常使用使用repo来管理分支集和不同的工作树。

+0

一个分支需要一个回购?你用过git吗? – Cascabel 2011-04-05 00:36:13

+0

像你一样:) tyvm,我专门使用git;你为什么要用不同的方式说话?对于所有的意图和目的,在本地文件系统上,'git branch bla'或'git clone之间没有太大的区别。 ../ blo'除非裸露回购中的工作树木;为什么你想用不同的方式来表述? – sehe 2011-04-05 07:49:05

+0

呃,是不是工作树足够的区别?如果无论出于何种原因,存储库不在同一个文件系统中,则其余部分也会加倍。 (这只是磁盘空间 - 它也需要人工时间来保持它们的同步!)我认为,鉴于OP提出这个问题的事实,你必须更加小心。创建分支基本上总是免费的;克隆回购不是。如果你可以调整第一句话,我会很乐意拿走我的失望 - 其余的答案很好,我刚刚发现这个开场非常误导。 – Cascabel 2011-04-05 12:57:36

0

回购协议中的分支机构也具有超越其他评论的优势。许多图形(或文本UI)工具可以向您显示关于repo中的分支上的commit/tags/etc的信息。如果您每次想要破解开发时都创建了新的存储库,那么这些数据就不可用。

使用内部分支时,您还可以更容易地表达分支关系的分支。在那里很自然,而有了额外的回购,你必须从外部追踪和管理这种关系。

+0

我问的原因是因为我最近参加了一些git培训,并且指导员正在展示一个工作流程,其中有2个回购。一个是在主分支上进行开发。这个回购是建立和测试,然后提交被推入“黄金”回购供QA使用。我们正试图将使用此模型的原因与使用分支进行对比。感谢大家的意见。我像往常一样学习很多东西。 :-) – user561638 2011-04-05 14:13:06