【问题标题】:Partial (per-file/folder) branching/tagging in Mercurial?Mercurial中的部分(每个文件/文件夹)分支/标记?
【发布时间】:2011-02-12 15:47:11
【问题描述】:

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

如何在 Mercurial 中实现类似的功能?我进行了广泛搜索,但似乎无法仅将几个文件/文件夹移动到另一个分支。

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

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

【问题讨论】:

    标签: version-control mercurial dvcs tortoisehg


    【解决方案1】:

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

    Transplant 与 Mercurial 一起分发,但您可能必须通过在 Mercurial.ini(或 .hgrc)中添加以下行来启用它:

    [extensions]
    transplant=
    

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

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

    【讨论】:

    • 感谢您的回复。为了确定,我将首先在本地克隆上尝试它。我玩过移植扩展,但它似乎是为了从相关克隆移植变更集。有问题的更改集仅修改了该特定文件夹,因此该方法应该有效。再次感谢。
    • 刚刚试了一下,效果很好。尽管如此,我还是遇到了一些合并冲突,但这些冲突要少得多,所以我将把它们整理出来。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2013-02-08
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多