代码之家  ›  专栏  ›  技术社区  ›  Matthew Flaschen

在hg中,当从另一个回购重新定价和/或移植时,如何删除分支名称?

  •  0
  • Matthew Flaschen  · 技术社区  · 15 年前

    基本上,我想尝试的是将hg修订从实验性回购的分支拉到主线的克隆中。但是我想放弃分支名称,这样就可以直接推送到服务器端主线repo中。最好举个简单的例子:

    hg init hg_mainline
    pushd hg_mainline 
    touch foo
    hg add foo
    hg commit -m 'foo'
    popd
    hg clone hg_mainline hg_experimental
    pushd hg_experimental
    hg branch bar_branch
    touch bar
    hg add bar
    hg commit -m 'bar'
    popd
    pushd hg_mainline
    hg pull ../hg_experimental
    hg log
    

    如果这需要重写历史,那也没关系 rebase transplant ,或其他工具。我两个都试过了,但都没用。两次回购的最新修订哈希值可能会有所不同。

    所以我希望hgèu mainline的最顶层版本看起来像:

    changeset:   1:xxxxxxxxxxxx
    tag:         tip
    user:        ...
    date:        ...
    summary:     ...
    

    我目前正在使用ubuntuppa中的hg1.6.2+55-18e1e7520b67。

    编辑:

    我还使用了1.3.1。我测试了下面两个,结果是一样的。

    grep -v 乱七八糟的。

    hg transplant -s ../hg_experimental 1 --filter "grep -v '^branch:'"
    

    使用:

    hg transplant -s ../hg_experimental 1
    

    无论是否有合适的grep,hg导出都不起作用。

    变更集修补程序如下所示:

    # HG changeset patch
    # User Matthew Flaschen <EMAIL>
    # Date 1282942390 14400
    # Branch bar_branch
    # Node ID b8e36efea72642f0a0194301489d5c48f619a921
    # Parent  85d9b9773d4ec09676dfcc4af89c142c46279444
    bar
    

    我从实验中学到:

    hg export 1 -o '/tmp/%b_%H_%R'
    

    并尝试导入主线:

    hg import /tmp/hg_experimental_b8e36efea72642f0a0194301489d5c48f619a921_1
    

    abort: no diffs found
    

    编辑2:

    如前所述,export方法失败只是因为文件是空的。它可以正常工作 --git

    2 回复  |  直到 15 年前
        1
  •  3
  •   Niall C.    15 年前

    最简单的解决方法是使用 hg export 来自实验性回购,以及 hg import 不会在修补程序中应用任何分支信息。不利的一面是,它们将在两次回购中显示为不同的变更集-- hg incoming 在实验性repo中,将显示您刚刚导出/导入的更改——因此,在执行此操作之后,如果您计划进行更多的实验,则最好删除并重新创建实验性repo。

    hg_mainline 存储库:

    hg export -r 1 -R ../hg_experimental | hg import -
    

    编辑2:来自 hg help diffs

    补丁和许多其他标准工具。

    虽然这种标准格式通常已经足够,但它并不编码以下信息:(snip)

    测试脚本中的测试文件是空的,因此您需要在其中输入一些内容,或者使用 --git 汞出口 .

        2
  •  2
  •   Matthew Flaschen    15 年前

    移植扩展已删除分支名称:

    cd hg_mainline
    hg transplant -s ../hg_experimental 1
    

    我应该为你做。如果你发现不是这样,你可以用 --filter 修改变更集(也许只是使用 grep -v

    我会注意到,如果你能想出一个工作流程,避免移植和保留哈希你更好。完全避免使用命名分支会使这变得更容易——匿名分支可能也可以使用书签,甚至更好。

    推荐文章