mercurial的最佳实践:分支与克隆以及部分合并?

...所以我已经习惯了使用Mercurial( addcommitdiff )的简单东西,并且了解了.hgignore文件(yay!)并且已经获得了在分支之间创建和切换的挂起( branchupdate -C )。

我有两个主要问题:

  • 如果我在分支“Branch1”中,并且想要引入分支“Branch2”中的一些但不是全部的更改,我该怎么做? 特别是如果所有更改都在一个子目录中。 (我想我可以只克隆整个存储库,然后使用像Beyond Compare这样的目录合并工具来选择和选择我的编辑,但好像应该有一种方法来隔离一个文件或一个目录中的更改)。

  • update -C分支之间切换似乎很容易,我想知道为什么我会打扰使用clone 。 我只能想到几个原因(见下文) - 我还有其他一些原因吗?

    一个。 如果我需要一次执行两个版本/分支(例如,执行性能度量比较)

    湾 进行备份(将存储clone到物理位置不同的网络驱动器)

    C。 像我上面提到的那样进行选择合并。


  • 我使用克隆为:

  • 短命的当地分支机构
  • 克隆到不同的开发机器和服务器
  • 前者对我来说很少见 - 主要是当我尝试一个我可能想完全放弃的想法时。 如果我想合并,我想要合并所有更改。 这种分支主要用于跟踪不同的开发者分支,因此他们不会互相干扰。 只是为了澄清这最后一​​点:

  • 我一直在努力修改我的变化,并拉我的同伴变更,他们拉我的。
  • 当我方便时,我会将这些分支中的一个(或全部)所有更改合并到我的。
  • 对于功能分支或更长寿命的分支,我使用命名分支,这些分支更容易在各个存储库之间共享,而无需合并。 当你想选择合并时,它也会“感觉”更好。

    基本上我是这样看的:

  • 命名分支用于开发应用程序的不同分支或版本
  • 克隆用于管理对同一版本应用程序的不同贡献。
  • 这是我的承诺,但这确实是一个政策问题。


    对于问题1,您需要更清楚地说明“变更”的含义。 你的意思是:

  • “我想把一个不同部门的一些变化集合,但不是全部变成这个。”
  • “我想将最新版本的其他分支中的一些但不是全部的文件放入这个文件中。”
  • 如果你的意思是项目1,你应该看看移植扩展,特别是挑选几个变更集的想法。

    如果你的意思是项目2,你会做到以下几点:

  • 更新到要将更改引入的分支。
  • 使用hg revert -r <branch you want to merge> --include <files to update>将这些文件的内容更改为其他分支上的内容。
  • 使用hg commit将这些更改作为新的变更集hg commit给分支。
  • 至于问题2,我从不使用存储库克隆来分支自己,所以我不知道。 我使用命名分支或匿名分支(有时带书签)。


    我有另一种选择让你看看:mercurial queues。

    这个想法是,在当前工作目录的顶部有一堆补丁(没有提交,“真正的”补丁)。 然后,您可以添加或删除应用的修补程序,添加一个,删除它,添加另一个修补程序等。一个修补程序或其子集最终会成为您可能想要对分支执行的新“功能”。 之后,你可以照常使用补丁(因为它是一个改变)。 如果你与其他人一起工作,分支机构可能更有用......?

    链接地址: http://www.djcxy.com/p/45045.html

    上一篇: best practices in mercurial: branch vs. clone, and partial merges?

    下一篇: When should you branch?