【问题标题】:Cheap cloning/local branching in MercurialMercurial 中的廉价克隆/本地分支
【发布时间】:2010-04-11 08:22:53
【问题描述】:

几天前刚开始使用 Mercurial,有些地方我不明白。

我想做一个实验性的事情,所以通常的做法是克隆我的存储库,在克隆上工作,如果最终我想保留这些更改,我会将它们推送到我的主存储库。

问题是克隆我的存储库需要很长时间(我们有很多代码),仅编译克隆的副本就需要一个小时。
所以我需要以某种方式在不同的存储库上工作,但仍然在我的原始工作副本中。

输入local branches

问题只是创建一个本地分支需要很长时间,而且与它们一起工作也不是那么有趣。因为在本地分支之间移动时不会“恢复”到目标分支状态,我必须发出hg purge(删除从分支中添加的文件)然后hg update -c(恢复修改后的文件从分支移动)。 (注意:我确实尝试了本地分支扩展的 PK11 fork,它是一个简单的本地分支创建崩溃并出现异常)

说到底,这太复杂了。我有哪些选择?

【问题讨论】:

    标签: mercurial dvcs


    【解决方案1】:

    除了克隆之外,还有几种方法可以与本地分支机构合作

    • 书签
    • 命名分支
    • 匿名分支

    您可能有兴趣阅读非常有见地的guide to branching in Mercurial。我猜 bookmarks 扩展是在您所描述的上下文中最合适的分支方式。

    【讨论】:

    • 它确实看起来像书签是要走的路,但如果我认为我的实验性东西不好怎么办?它现在在我的存储库中
    • @Zack 您可以启用 mq 扩展并运行hg strip 命令来删除您不再需要的未发布分支。
    • 我不确定这些是否能解决问题,因为听起来更新和重新构建工作副本需要很长时间,而不是真正的克隆
    • @jk:虽然更新后重新构建需要时间,但它比完全重新构建花费的时间要少得多。这是我愿意忍受的事情,而且真的没有办法避免。
    • hg strip 非常适合我的目的,我会尝试一下,看看它是否有效
    【解决方案2】:

    可能不是您想听到的答案,但我想说也许您应该考虑将存储库拆分为更易于管理的块:)。例如。该文档和那些设计文件是否真的需要包含在同一个存储库中,该编辑器工具是否不应该拥有自己的存储库,等等。

    因为克隆会创建硬链接,所以它几乎已经达到了最快的速度;如果克隆已经花费了 5-10 分钟,那么制作文件系统副本肯定会更糟。 (提示:记住hg clone -U,如果您不需要工作副本,它会快得多。)

    否则,是的,带有书签的匿名分支是进行就地切换的常用方法。

    【讨论】:

    • 实际上我们在存储库中几乎没有文档,主要是我们的源代码和 3rdparty。我们可以将 3rdparty 移动到另一个存储库,但 mercurial 中的 subrepos 支持是一项正在进行的工作,所以我不确定这是否是个好主意。
    • 据我所知,subrepos 功能是一项正在进行的工作,因为它尚未与 Mercurial 中的所有命令和扩展完全集成(如果我记得我在哪里我会给你一个报价阅读)。但是,该功能在兼容性方面是稳定的。
    【解决方案3】:

    克隆本地仓库需要多长时间?

    听起来你构建过程可能是我的薄弱环节 - 也许你需要像 ccache 这样的东西?以便您可以快速克隆和构建

    【讨论】:

    • 克隆大约需要 5-10 分钟,问题是编译它并设置其他必要的东西。使用组合功率达到 50ghz 的 incredibuild 编译大约需要 45 分钟。不幸的是 ccache 不适用于视觉工作室
    • 我无法从网络上判断 incredibuild 是否有能力缓存构建,如果它需要那么长时间,我会假设不会(也许检查它的文档?)。作为一种解决方法,您可能会在克隆时复制 obj 和 bin 目录。
    • 据我所知,incredibuild 无法缓存构建,但我认为您有点忽略了这一点。复制工作副本对我来说工作量太大了。即使我的构建没有花费这么长时间,在我可以开始在完全不同的工作副本中工作之前,还有一些其他的东西需要配置。因此,在存储库之间共享工作副本的概念以及来回移动的简单方法似乎是最不痛苦的解决方案。
    • 如果您在克隆后需要手动配置,我会说您的构建过程不够自动化,但如果您对它感到满意并使用 mq 那就没问题
    【解决方案4】:

    难道您不能在现有克隆的基础上进行实验,当您想对主线进行一些更改时,请返回并更新到开始实验之前的上一个版本?

    【讨论】:

      猜你喜欢
      • 2012-01-22
      • 1970-01-01
      • 2011-05-31
      • 2013-01-04
      • 1970-01-01
      • 2011-05-15
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多