Mercurial中的部分(每个文件/文件夹)分支/标记?

时间:2011-02-12 15:47:12

标签: version-control mercurial dvcs tortoisehg

在经典VCS(CVS / SVN)中,我可以在一个分支中添加新文件/文件夹,然后用一些分支标记“标记”它们,以便它们出现在另一个分支以及(从哪里)他们可能会再次分歧)。这可以通过将工作副本更新到特定状态然后设置分支标记来实现。

如何在Mercurial中实现类似的功能?我搜索了很多,但似乎没有办法将只有几个文件/文件夹移动到另一个分支上。

在我的情况下,一些历史分支收到了一些更新,现在应该将其移动到当前活动的分支上(即在将repo从Subversion转换为Mercurial之前)。是否有任何方法可以保留这些文件/此文件夹的历史记录?或者我是否必须将这些文件的当前状态重新引入另一个分支(即从头开始)?

旁注:两个分支的提示之间有几百个相互冲突的变化。这就是为什么我在寻找分支之间完全合并的替代方法(这也是一个问题,因为合并后其中一个分支将不复存在)。

1 个答案:

答案 0 :(得分:2)

Mercurial transplant extensio n应该可以解决问题。移植会将变更集重新应用于您选择的分支。它通常用作将错误修复从一个分支移动到另一个分支的方式(即:从对应于已发布的代码版本的长期运行分支到主动开发的默认分支)。

移植与Mercurial一起发布,但您可能必须通过将以下行添加到Mercurial.ini(或.hgrc)来启用它:

[extensions]
transplant=

从TortoiseHg,您可以更新到目标变更集(即:您要放置修订的位置),然后右键单击要移动的变更集并选择“移植到本地”。命令行帮助可以在上面的链接中找到。

有一点需要注意,移植适用于变更集,并且它希望应用整个变更集。因此,如果变更集包含您想要应用的某些更改,而某些变更集则不需要,那么您必须做更多的工作。解决这个问题的一种方法是使用histedit扩展名并将这样的变更集分成两部分。这可能很复杂,如果您的仓库不在本地包含(例如:如果它位于某个服务器上),则不建议这样做。一个强力选择是移植变更集,然后简单地撤消不需要的更改,并将这些mod作为第二个变更集提交。