你是对的。CVS 是一个糟糕的选择。缺乏原子检查足以在我的书中取消它的资格。人们喜欢它,因为他们知道它,但他们不明白它有什么问题。
硬件公司和软件公司使用系统的唯一区别往往是 RTL 模块具有非常明确的接口并且通常由一个人拥有,因此开发非常分段。由于减少了对分支的需求,这实际上与集中式系统非常有效。开发人员不会过多地踩对方的脚趾。
我见过一家硬件公司尝试 Mercurial,结果一团糟。并不是说它是错误的工具,而是他们有 CVS 的心态并试图让它像 CVS 一样工作。我在这里写了一个相当咆哮的帐户。
我个人认为 SVN 非常适合硬件开发,尤其是对于来自 CVS 的人。检查子树的能力也很有用。也就是说,我目前在一个尝试使用 SVN 建立“功能分支”工作流程的地方工作,并且合并有很多陷阱。他们正在考虑未来的 git/hg 。不过,他们是一家小型、进步的公司。
从 CVS 转移到 Mercurial 的公司最终选择了 Perforce。对他们来说,这完全是关于支持合同和责备某人。对于用户......好吧......我认为它向用户展示了一个非常复杂的前端。整个工作空间的概念只是矫枉过正,分支管理很痛苦。作为一个系统,它是有能力的,但需要做很多工作。
如果我要在另一家硬件公司部署 Mercurial,我会大量使用子存储库。我这样做是为了从 subversion 中取回子树检出的有用部分,即 RTL 模块可以被检出并单独分支。它也给了我一个集成项目的概念,这将是我将所有子模块拉入的项目。这在某种程度上将 RTL 版本与 RTL 开发分离,并促进使用相同模块的不同芯片。此外,通过保持模块分离,历史记录也保持隔离,从而更容易跟踪模块的更改。最后,它避免了我在另一个答案中描述的“数百名开发人员访问一个中央仓库并进入合并竞赛”的问题。