将特定分支移动到新存储库

时间:2014-03-21 19:13:28

标签: version-control mercurial tortoisehg

我有一个mercurial存储库,我在7-8个月前创建了一个分支。现在这个分支是我完成大部分开发的分支,而且我在默认分支和其他分支中没有任何成果。

我想创建一个仅代表此分支的新存储库。即我想将此分支移动到具有历史记录的新存储库。

我尝试使用HG转换工具,语法如下:

hg convert --filemap ~filemap.txt --branchmap branchmap.txt  --source-type hg --dest-type hg "E:\MyStuff\Dev\MyOldRepo" "E:\NewRepo"

文件映射我已经定义了我要包含的所有文件。在branchmap文件中,我定义了

MyOldNamedBranch default

转换工具会将MyOldNamedBranch重命名为默认值,但它也会带来我不需要的其他分支的变更集。

我还尝试在设置文件中设置以下内容但没有结果:

[convert]
hg.usebranchnames=0
hg.startrev=5262

请建议我如何将分支移动到具有历史记录的新存储库并留下其他分支。

2 个答案:

答案 0 :(得分:1)

我只在命令中设置了起始修订号,但它确实有效。

hg convert --config convert.hg.startrev=5262 --branchmap branchmap.txt "E:\MyStuff\Dev\MyOldRepo" "E:\NewRepo"

它就像一个魅力。

答案 1 :(得分:0)

试试这个: 只克隆您需要的分支:

hg clone E:\MyStuff\Dev\MyOldRepo -b MyOldNamedBranch .\NewRepo

然后在NewRepo中,将所有变更集转换为草稿阶段:

hg phase -r 0 -d -f

然后更新到MyOldBranch的专利(我假设父母是默认分支)

hg update -r "parents(min(branch(MyOldBranch)))"

然后在完全相同的变更集上重新定义MyOldBranch。

hg rebase -s "min(branch(MyOldBranch))" -d .

与其他分支完全一样。

说实话,我不确定这是否是最好的方法,但它对我有用。