Mercurial 1.4.x中的subprepos功能是否可以用于生产?

时间:2010-02-06 16:08:33

标签: mercurial svn-externals subrepos

我想评估Mercurial的工作项目。但是我的大多数项目都非常依赖于svn:externals-like支持的存在。我搜索了StackOverflow并搜索了Mercurial中的相应支持。我发现的只是在Mercurial 1.3中添加了subrepo功能,但是the page for this feature说:

  

subrepos是Mercurial 1.3的实验性功能。所以不要在任务关键型存储库上执行此操作!

我不想使用不稳定的东西。

任何人都可以了解这个功能的实际状态,以及抛光/完成它的计划以及何时称为“稳定”并为关键任务存储库做好准备?

2 个答案:

答案 0 :(得分:6)

#mercurial IRC频道中的词是subrepos将继续像他们一样工作,支持将会增长。例如,目前'hg status'命令不是subrepo意识 - 它可以工作,它只是没有递归,但将来它将是。但是,当前行为,fileformats(.hgsub和.hgsubstate)只会以向后兼容的方式更改。

所以,现在继续指望它,并期待它变得更好。

P.S。从mercurial 1.4.2开始,subrepos现在可以是subversion repos,所以你可以使用mercurial parent和svn kid。

答案 1 :(得分:1)

到目前为止,我对我(轻)使用它的功能运气不错。它在两个地方派上用场了:

  1. 使用单个hg pull命令备份不相关的存储库树。
  2. 将项目与其依赖项的特定版本捆绑在一起,以便单个hg clone获取可构建的源代码。这更接近典型的svn:externals用法。
  3. 到目前为止,我已经看到了一些限制:

    1. 如果上面的情况#1,您必须立即提交所有子目录。这只是偶尔令人讨厌,因为Mercurial(像任何DVCS一样)鼓励频繁提交 - 所以大部分回购都不会一直处于不完整的状态。
    2. 只有最基本的Mercurial命令可以识别子信息:clonepush / pullupdate / commit以及其他几个命令
    3. 扩展作者需要时间来测试他们对subrepos存储库的扩展。
    4. 当Mercurial团队将该功能描述为“实验性”时,他们并不意味着它突然决定删除所有数据。它们只是意味着他们没有编码所有边缘情况,如名称冲突(例如,一个开发人员添加了一个名为README的子文件,而另一个开发人员添加了一个名为README的文本文件。