0

基本上,我想尝试的是将 hg 修订版从实验性 repo 的一个分支拉到主线的克隆中。但我想丢弃分支名称,以便可以直接推送到服务器端主线 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

如您所见,主线现在包含一个带有“branch: bar_branch”的 rev。我不希望这个版本有一个分支(即它应该是默认的)。

如果这需要使用rebase移植或其他工具重写历史记录,那也没关系。我已经尝试了这两种方法,但无法正常工作。两个存储库之间的最新修订哈希可能最终不同。

所以我希望 hg_mainline 的最高版本看起来像:

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

没有命名的分支。

同样,如果没有从 hg_experimental 中保留哈希,也没关系。

我目前正在使用来自 Ubuntu PPA 的 hg 1.6.2+55-18e1e7520b67。

编辑:

我也用过 1.3.1。我对两者都进行了以下测试,这里的结果是相同的。

我让它与移植一起工作,但仅限于grep -vkludge。

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

和:

hg transplant -s ../hg_experimental 1

无论有没有合适的 grep,hg export 都不起作用。

变更集补丁看起来像:

# 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:

如前所述,导出方法失败只是因为文件为空。它适用于--git或适用于非空文件。

4

2 回答 2

3

最简单的解决方案是hg export从实验存储库中使用,并hg import进入主存储库。默认情况下,hg import不会应用补丁中的任何分支信息。缺点是它们将在两个 repo 中显示为不同的变更集——hg incoming在实验 repo 中将显示你刚刚导出/导入的更改——所以在你这样做之后,你最好删除并重新创建实验 repo如果你打算做更多的实验。

编辑:从hg_mainline存储库:

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

EDIT2:来自hg help diffs

Mercurial 显示文件两个版本之间更改的默认格式与 GNU diff 的统一格式兼容,GNU 补丁和许多其他标准工具都可以使用该格式。

虽然这种标准格式通常就足够了,但它不会对以下信息进行编码:(snip)

  • 创建或删除空文件

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

于 2010-08-27T19:13:38.817 回答
2

移植扩展已经废弃了分支名称:

cd hg_mainline
hg transplant -s ../hg_experimental 1

应该为你做。如果您发现情况并非如此,您始终可以在进入的过程中使用--filter修改变更集(也许只是使用grep -v)。

我会注意到,如果你能想出一个避免移植并保留散列的工作流程,你会更好。完全避免命名分支会使这更容易——带有书签的匿名分支可能也可以工作,或者更好。

于 2010-08-27T19:15:18.313 回答