2010-03-24 149 views
22

我目前的项目分为3个部分:网站,桌面客户端和第三方程序的插件。我们最初使用Subversion开始源代码控制,但决定在阅读Joel Spolsky's final post后尝试使用Mercurial。考虑到我们之前并没有真正使用过svn的大部分潜力,我们开始重新启动一些关于源代码控制如何工作的基本概念,以使这种转变变得简单。Mercurial标记/分支策略

但是,在建立了我们的初始仓库之后,我们会失去标签和分支应该如何在这样的项目上工作。

本质上,我们正在同时处理所有这3个零件。我们希望发布是三部分的组合。目前我们正在一个存储库中工作。

对于Plug-in部分,我们已经完成了第一次迭代,我们将其称为Plug-In v0.1。对于另外两个部分的第一个官方版本,我们也想将它们称为Website v0.1和Desktop Client v0.1。当所有三个部分都在v0.1时,我们希望有一个Full Project v0.1。

我们的问题是我们不确定如何在Hg库中管理所有这些。处理这个问题的最好方法是为3个稳定版本创建3个独立的存储库,然后为当前的开发创建3个更多的存储库?目前我们将这一切放在一个存储库中。我们是否应该在分支机构(与克隆仓库不同的分支机构?)和标签?

任何帮助,非常感谢。

+0

我最近也开始考虑汞,这些基本上是我的问题。 – 2010-03-24 18:40:29

回答

8

这绝对听起来像是你想为3个零件单独进行回购,如果你需要在发布时将3个结合在一起,那么将这3个存储库设置为整个项目存储库的subrepos也可能是有用的。

0

尝试使用Joel's Tutorial on Mercurial。这可能会产生更多或者如何使用它。 SVN中并没有真正的“分支”,实际上,停止尝试像使用SVN一样使用Mercurial可能是个好主意。而不是分支,你有你自己的本地存储库。

+2

每个分支启动一个新的存储库只是Mercurial支持的其中一种可能性。 – 2010-03-24 18:24:50

19

我强烈推荐Steve Losh的博客条目A Guide to Branching in Mercurial,他介绍了Mercurial支持的几种分支方法。

使用Mercurial的命名分支功能可能是与SVN分支最接近的匹配。

5

您可以将它们保存在一个存储库中或分开项目。对我而言,这取决于应用程序之间共享多少代码(如果有的话)。如果组件之间不共享代码,请为每个组件使用不同的存储库。

单独的存储库允许您轻松地为每个组件标记版本(v0.1),然后根据需要继续进行开发。当您准备发布组合产品时,只需从每个存储库的所需标签中拉出,即可获得完整的产品版本。如果您的应用程序的交付成果与三个组件中的任何一个都不相关,则还可以为组合产品创建一个存储库以保留该数据。您可以通过分支或克隆存储库处理每个组件的分支。

如果您将组件保存在一个存储库中,它仍然可以工作,但您的标签和分支会变得更加混乱。当插件升级到v0.1时,请为“插件v0.1”创建一个标签。对桌面和Web客户端做同样的事情。然后,当您想要发布产品时,您需要从三个不同的标签中获取,这些标签的每个组件都在v0.1。

我会选择单独的存储库。如果共享代码,这个决定会变得更加复杂,但您可以找到方法将您的依赖关系作为库而不是代码。

对于您的分支问题,this article是一个很好的指导不同的选项和优点/缺点。