基本上,我想尝试的是将 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 -v
kludge。
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
或适用于非空文件。