mercurial的最佳实践:分支与克隆,还是部分合并?
…所以我已经习惯了Mercurial( add
, commit
, diff
)的简单的东西,发现了.hgignore文件(耶!),并得到了创build和分支之间切换( branch
, update -C
)。
我有两个主要的问题:
-
如果我在分支“Branch1”中,并且想从分支“Branch2”中引入一些但并非全部的更改,那我该怎么做? 特别是如果所有更改都在一个子目录中。 (我想我可以只克隆整个资源库,然后使用Beyond Compare这样的目录合并工具来select我的编辑,好像应该有一种方法来隔离一个文件或一个目录中的变化)。
-
切换与
update -C
分支之间似乎很容易,我想知道为什么我会打扰使用clone
。 我只能想到几个原因(见下文) – 我还有其他一些原因吗?一个。 如果我需要一次执行两个版本/分支(例如,执行性能度量比较)
湾 进行备份(将存储
clone
到物理位置不同的networking驱动器)C。 像我上面提到的那样进行select合并。
我使用克隆为:
- 短命的当地分支机构
- 克隆到不同的开发机器和服务器
前者的使用对我来说是非常罕见的 – 主要是当我正在尝试一个想法时,我可能会完全放弃。 如果我想合并,我想要合并所有的更改。 这种分支主要是为了跟踪不同开发商的分支,所以他们不会互相干扰。 只是为了澄清这最后一点:
- 我一直在努力改变我的改变,并把我的同事们的改变拉到我的手中。
- 当我方便的时候,我将把这些分支中的一个(或全部)的所有变化合并到我的。
对于function分支或更长寿命的分支,我使用命名分支,这些分支更容易在不同的存储库之间共享。 当你想select合并时,它也“感觉”更好。
基本上我是这样看的:
- 命名分支用于开发应用程序的不同分支或版本
- 克隆用于pipe理对相同版本的应用程序的不同贡献。
这是我的承诺,虽然这是一个政策问题。
对于问题1,你需要更清楚一点你所说的“变化”是什么意思。 你的意思是:
- “我想把一个不同部门的一些变化集合,但不是全部变成这个变化集团。”
- “我想把最新版本的一些,但不是全部,在不同的分支到这个文件 。”
如果你的意思是项目1,你应该看看移植扩展,特别是Cherrypicking几个变更集的想法。
如果你的意思是项目2,你会做到以下几点:
- 更新到要将更改引入的分支。
- 使用
hg revert -r <branch you want to merge> --include <files to update>
将这些文件的内容更改为其他分支上的内容。 - 使用
hg commit
将这些更改作为新的变更集hg commit
给分支。
至于问题2,我从不使用仓库克隆来分支自己,所以我不知道。 我使用命名分支或匿名分支(有时与书签)。
我有另一种select,你可以看看:mercurial queues。
这个想法是,在当前工作目录的顶部有一堆补丁(没有提交,“真正的”补丁)。 然后,您可以添加或删除应用的修补程序,添加一个,删除它,添加另一个修补程序等。一个修补程序或它们的一个子集最终将成为一个新的“function”,因为您可能想要使用分支。 之后,你可以像往常一样应用补丁(因为这是一个变化)。 如果你和其他人一起工作,分支可能会更有用…?