mercurial的最佳实践:分支与克隆以及部分合并?
...所以我已经习惯了使用Mercurial( add
, commit
, diff
)的简单东西,并且了解了.hgignore文件(yay!)并且已经获得了在分支之间创建和切换的挂起( branch
, update -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?