您是否知道任何大型公司(最好是硬件)成功使用mercurial作为其版本控制系统(vcs。)
我有svn / cvs / perforce和一点git的经验。内部……
你是对的。 CVS是一个糟糕的选择。缺乏原子检查足以在我的书中取消它的资格。人们喜欢它,因为他们知道它并且他们不明白它有什么问题。
对于硬件公司和软件公司使用系统之间的唯一区别往往是RTL模块具有非常明确的接口并且通常由一个人拥有,因此开发是非常分段的。这对于集中式系统实际上非常有效,因为减少了对分支的需求。开发人员并没有像往常一样对待脚趾。
我见过一家硬件公司尝试Mercurial,这是一团糟。并不是说它是错误的工具,而是他们有一个CVS思维模式,并试图让它像CVS一样工作。我写了一个相当咆哮的帐户 这里 。
我个人认为SVN非常适合硬件开发,特别是对于来自CVS的人。检查子树的能力也很有用。也就是说,我目前正在一个试图与SVN进行“功能分支”工作流程的地方工作,合并有很多陷阱。他们将来会考虑git / hg。然而,他们是一家小型的,先进的公司。
从CVS搬到Mercurial的公司进入了Perforce。对他们而言,这完全取决于支持合同,并有责任归咎于他人。对于用户......好吧....我认为它给用户带来了非常复杂的前沿。整个工作空间概念只是矫枉过正,分支管理很痛苦。作为一个系统,它有能力,但需要做很多工作。
如果我要在另一家硬件公司部署Mercurial,我会大量使用 子库 。我这样做是为了从subversion返回子树检查的有用部分,即可以检出RTL模块并单独分支。它还给了我一个集成项目的概念,它将是我将所有子模块拉入的项目。然后,这在一定程度上将RTL版本与RTL开发分离,并使用相同的模块促进不同的芯片。此外,通过保持模块分离,历史也保持隔离,使模块上的跟踪更改更容易。最后,它避免了“数百名开发人员访问一个中央仓库并进入合并竞争”的问题,我在其他答案中描述了这个问题。