十多年来,我们有一个非常大的遗留 CVS 存储库 (66GiB),并且还在不断增加。现在我们有一些分包公司,需要在一些模块和分支上工作。
我们需要为他们创建一些分支并将这些分支发送给他们。我们还需要不时将他们的更改合并到我们的主要分支中。
听起来您只想为分包商过渡,而不是为其他所有人。我强烈建议你不要这样做。要么转换所有人,要么不转换任何人。运行混合系统是一件非常痛苦的事情,尤其是在从 DVCS 上的人员那里获取更改时。
我们关心的是:
是您的 CVS 存储库中有多个模块,但不能给它们所有模块,或者您想限制它们可以访问的历史记录?
当模块存储为单独的存储库而不是一个存储库中的多个模块时,DVCS 工作得更好*。这有很多原因,但主要是为了不同模块中的更改不会导致不必要的合并。
(* CVCS 也是如此,但是创建一个人们只做一次的新模块通常会很痛苦。我怀疑如果它被拆分,你不会有 66GB。)
因此,如果您进行转换,则需要分离模块。这将允许您共享一些模块而不是其他模块。我知道 Mercurial 能够在转换期间从多模块存储库中设置的路径创建存储库。我希望 Git 具有类似的功能。
- 我们需要向他们发送一些历史信息,而不仅仅是“HEAD”版本的代码。
这几乎决定了 DVCS。这是一个定义属性。
- 我们仍在做一些开发工作,所以我们需要不时向他们发送变更集。
...这就是为什么您应该使用与他们相同的 VC 工具。否则,您将花费所有时间在系统之间转换变更集。
GIT 和 Mercurial 是从 CVS 迁移的好选择吗?GIT/Mercurial 能满足我们的需求吗?
是的,是的,但这不是按钮转换。它需要计划、承诺和教育。
编辑:我认为我们实际上需要一个具有多站点功能的集中式修订控制,能够基于部分中央回购创建异地回购。并且可以很容易地在站点之间合并。
一个集中但分布式的版本控制系统。被我耍到了!
最后一点,不要将集中/分布式开发实践与集中/分布式工具混淆。在具有分布式 VCS 的集中式开发模型中工作是完全合理的。