我目前的项目分为3个部分:网站,桌面客户端和第三方程序的插件。我们最初使用Subversion开始我们的源代码控制,但决定在阅读Joel Spolsky's final post后尝试Mercurial。考虑到我们之前没有真正使用过svn的大部分潜力,我们认为从源控制如何工作的一些基本想法开始,这将使这种转变变得容易。
然而,在设置了我们的初始存储库之后,我们很遗憾标记和分支应该如何在这样的项目中起作用。
基本上,我们同时处理所有这三个部分。我们希望发布版本是3个部分的组合。目前我们正在一个存储库中工作。
对于Plug-in部分,我们完成了第一次迭代,我们称之为Plug-In v0.1。对于其他两个部分的第一次正式构建,我们还想将它们称为网站v0.1和桌面客户端v0.1。当所有三个部分都在v0.1时,我们希望有一个完整的项目v0.1。
我们的问题是我们不确定如何在Hg存储库中管理所有这些。处理此问题的最佳方法是为3个稳定版本创建3个单独的存储库,然后为当前开发创建3个存储库吗?目前我们将这一切都集中在一个存储库中我们应该在分支机构中执行此操作(分支是否与克隆存储库不同?)和标记?
非常感谢任何帮助。
答案 0 :(得分:19)
我强烈推荐Steve Losh的博客文章A Guide to Branching in Mercurial,其中介绍了Mercurial支持的几种分支方法。
使用Mercurial的命名分支功能可能是与SVN分支最接近的匹配。
答案 1 :(得分:8)
这听起来好像你想要3个部分的单独存储库,如果你需要在发行版中将3个绑定在一起,那么将这3个存储库作为整个项目存储库的subrepos也可能是有用的。
答案 2 :(得分:5)
您可以将它们保存在一个存储库中或将项目分开。对我来说,这取决于应用程序之间共享多少代码(如果有的话)。如果组件之间没有共享代码,请为每个组件使用不同的存储库。
单独的存储库允许您使用版本(v0.1)轻松标记每个组件,然后根据需要继续进行开发。当您准备发布组合产品时,只需从每个存储库的所需标记中提取,您就可以获得完整的产品版本。如果您具有与三个组件中的任何一个无关的应用程序的可交付成果,您还可以为组合产品创建存储库以保留该数据。您可以通过分支或克隆的存储库处理每个组件的分支。
如果您将组件保存在单个存储库中,它仍然可以工作,但您的标签和分支将变得更加混乱。当插件进入v0.1时,为“插件v0.1”创建一个标签。为桌面和Web客户端执行相同的操作。然后,当您想要发布产品时,您需要从三个不同的标签中提取每个组件的v0.1。
我会选择单独的存储库。如果存在共享代码,则决策会更复杂,但您可以找到将依赖项作为库而不是代码的方法。
关于分支的问题,this article是对不同选项和优缺点的良好指导。
答案 3 :(得分:0)
尝试使用Joel's Tutorial on Mercurial。这可能会产生更多或如何使用它。确实没有SVN中使用的“分支”,实际上,停止尝试使用Mercurial可能是一个好主意,就好像它是SVN一样。您可以拥有自己的本地存储库,而不是分支。