避免将不需要的本地历史记录推送到Bazaar或Mercurial中的主存储库

时间:2012-01-31 20:18:25

标签: mercurial dvcs bazaar rebase

我是DVCS的新手,所以我可能误解了一些概念和术语,但这是我想要实现的想法,我试图找出Bazaar或Mercurial是否支持这一点。一种直截了当的方式:

主存储库中有经过良好测试的代码。假设我从那里克隆(或拉或分支或其他任何术语)到本地存储库,然后每天当我处理代码时,我提交本地更改,有时一天多次。

在完成所有更改和测试之后,我想只获取放入主存储库的每个文件的最新(本地)提交版本,没有数十个中间版本我在调试和单元测试期间在本地提交。

根据我一直在阅读的内容,显然这些半生不熟的版本的整个历史将反映在主存储库中,如果我推动它。一些互联网文章似乎暗示如果处理得当,rebase可以解决这个问题,但是不清楚是否/如何做到这一点,因为看起来rebase更多的是避免分叉的分支/合并历史而不是避免提交一大堆中间版本。

3 个答案:

答案 0 :(得分:5)

您要查找的关键字是折叠折叠(Mercurial)或 squash (Git)。我担心我不知道Bazaar通常的用语是什么。

在Mercurial中,您可以使用histedit extension(自Mercurial 2.3以来的捆绑扩展)将一系列变更集折叠为单个变更集。它提供了第三方collapse extension中功能的超集。

rebase extension(另一个标准扩展名)与--collapse标志具有相同的功能。你完全正确的做法是通常进行变基以避免不必要的合并,但它也必须用于collapsing (and editing) changesets in Git。 Mercurial的histedit extension是在Git中的交互式rebase命令之后建模的。

答案 1 :(得分:5)

一些集市选择。

  1. 如果你想摆脱几十个本地提交,你实际上是在抛弃历史。一种方法是使用bzr uncommit命令。例如。

    bzr uncommit -rbranch:https://url_to_mainrepo
    

    (在你完成主要回购的修订之前扔掉它们。不要担心它会告诉你将要做什么并在做之前与你确认)

    然后你可以做一个新的提交,其他所有其他人合并为一个。

  2. Bazaar通常隐藏合并修订版。将您的小提交汇总到合并修订版的一种方法是保留主仓库的本地分支/结账。然后,当您准备就绪时,bzr merge在您对本地主副本克隆的更改中,然后提交合并修订。

    通过这种方式,您仍可保留所有历史记录,但所有小修订都会整齐地汇总到合并修订版中。然后,您可以在需要时查看该历史记录。

  3. 以下是如何查看合并修订的示例:

    $ bzr log
    ------------------------------------------------------------
    revno: 2 [merge]
    message:
      summary of the things I did
    ------------------------------------------------------------
    revno: 1
    message:
      some change on the mainline
    ------------------------------------------------------------
    Use --include-merged or -n0 to see merged revisions.
    

    以下是如何查看合并修订的示例:

    $ bzr log -n0
    ------------------------------------------------------------
    revno: 2 [merge]
    message:
      summary of the things I did
        ------------------------------------------------------------
        revno: 1.1.2
        message:
          my first step
        ------------------------------------------------------------
        revno: 1.1.1
        message:
          my second step
    ------------------------------------------------------------
    revno: 1
    message:
      some change on the mainline
    

答案 2 :(得分:1)

在Bazaar中,这是通过在本地拥有一个单独的“克隆”(即bzr branch URL)主repo来处理的,然后您可以使用多个提交来创建本地功能分支。当您准备将该工作移动到主仓库中时,您将bzr merge功能分支转移到主分支中。这样您就可以在主分支中使用已修改的工作树,然后将其提交并推送到您的官方主仓库。此提交包括功能分支的修订历史记录,但通常隐藏在bzr log或其他日志历史记录视图中。