...所以我已经习惯了Mercurial(add
,commit
,diff
)的简单内容,并了解了.hgignore文件(是的!)和已经掌握了在分支之间创建和切换的问题(branch
,update -C
)。
我有两个主要问题:
如果我在分支“Branch1”并且我想从分支“Branch2”中提取一些但不是所有的更改,我该怎么做?特别是如果所有更改都在一个子目录中。 (我想我可以克隆整个存储库,然后使用像Beyond Compare这样的目录合并工具来选择和选择我的编辑。看起来应该有一种方法来隔离一个文件或一个目录中的更改。 )
使用update -C
在分支之间切换似乎很容易,我想知道为什么我会费心使用clone
。我只能想到几个原因(见下文) - 我还有其他一些原因吗?
一个。如果我需要同时对两个版本/分支进行操作(例如,执行性能指标差异)
湾用于备份(clone
存储库到物理上不同位置的网络驱动器)
℃。像我上面提到的那样选择和选择合并。
答案 0 :(得分:50)
我使用克隆:
以前的使用对我来说非常罕见 - 主要是当我尝试一个我可能想完全放弃的想法时。如果我想合并,我将要合并所有更改。这种分支主要用于跟踪不同开发者的分支,因此它们不会相互干扰。只是澄清最后一点:
对于功能分支或更长寿的分支,我使用命名分支,这些分支在存储库之间更舒适地共享而不进行合并。当你想有选择地合并时,它也“感觉”更好。
基本上我这样看:
这是我的看法,但实际上这是政策问题。
答案 1 :(得分:29)
对于问题1,您需要更清楚地了解“变化”的含义。你的意思是:
如果您的意思是第1项,那么您应该查看Transplant扩展名,特别是如果想要挑选一些变更集。
如果您的意思是第2项,您将执行以下操作:
hg revert -r <branch you want to merge> --include <files to update>
将这些文件的内容更改为其在另一个分支上的内容。hg commit
将这些更改作为新的变更集提交给分支。至于问题2,我从不使用存储库克隆来自己分支,所以我不知道。我使用命名分支或匿名分支(有时使用书签)。
答案 2 :(得分:3)
我还有另一种选择:mercurial队列。
这个想法是,在当前工作目录的顶部有一堆补丁(没有提交,“真正的”补丁)。然后,您可以添加或删除应用的补丁,添加,删除,添加另一个补丁等。一个补丁或其中一个子集最终成为一个新的“功能”,因为您可能想要使用分支。之后,您可以照常应用补丁(因为它是一个更改)。如果你和其他人一起工作,分支机构可能会更有用......?