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


74

...因此,我已经习惯于使用Mercurial(add,,)进行简单的操作commitdiff并了解了.hgignore文件(yay!),并开始创建和在分支(branchupdate -C)之间切换。

我有两个主要问题:

  1. 如果我在分支“ Branch1”中,并且想从分支“ Branch2”中提取部分但不是全部更改,我该怎么做?特别是如果所有更改都在一个子目录中。(我想我可以克隆整个存储库,然后使用Beyond Compare之类的目录合并工具来选择并选择我的编辑内容。似乎应该有一种方法可以将更改仅隔离到一个文件或一个目录中。

  2. 在分支之间切换update -C似乎如此简单,我想知道为什么还要麻烦使用clone。我只能想到几个原因(请参阅下文)-我是否还缺少其他一些原因?

    一种。如果我需要一次处理两个版本/分支(例如,执行性能指标差异)

    b。用于备份(clone存储库到物理位置不同的网络驱动器)

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

Answers:


50

我将克隆用于:

  • 短暂的本地分支机构
  • 克隆到不同的开发机器和服务器

前一种用法对我来说很少见-主要是在我尝试一个我可能想完全放弃的想法时。如果要合并,则要合并所有更改。这种分支主要用于跟踪不同开发人员的分支,以使它们不会互相干扰。只是为了澄清最后一点:

  • 我一直在努力进行更改,并与其他开发人员进行更改,他们也加入了我的团队。
  • 在我方便的时候,我会将所有(或全部)这些分支的更改合并到我的分支中。

对于功能分支或寿命更长的分支,我使用命名分支,这些分支在存储库之间更方便地共享而不合并。当您要有选择地合并时,它也“感觉”更好。

基本上我是这样看的:

  • 命名分支用于开发应用程序的不同分支或版本
  • 克隆用于管理对同一应用程序版本的不同贡献。

这是我的看法,尽管实际上这是政策问题。


3
为什么当它明显地遗漏了问题的要点时,为什么被如此多次接受和批评呢?它不会回答1,也不会回答2,而史蒂夫的答案实际上恰到好处。
2012年

3
@mare很高兴,因为OP认为它很有用。有时,一个问题的观点不止一种,并且stackoverflow旨在使大多数解决OP问题的答案(通过被接受)获得信任,而对社区最有用的答案(通过投票)获得信任。一个有用的答案并不总是最直接的答案,只要它能解决问题背后的根本原因。在这种情况下,人们在现实生活中问过我类似的问题,我在这里分享的信息是他们发现最有用的信息,因此我认为在这里也可能有所帮助。
Draemon

2
@mare,我投了赞成票,因为我通过Google登陆了此页面,它解决了我的问题。
陈征费2012年

29

对于问题1,您需要更加清楚“更改”的含义。您的意思是:

  1. “我想将另一个分支中的一些但不是全部变更集引入到这个分支中。”
  2. “我想将另一个分支中的某些但不是全部文件的最新版本拖到这个文件中。”

如果您指的是项目1,则应查看Transplant扩展,特别是挑选几个变更集的想法。

如果您的意思是项目2,则请执行以下操作:

  • 更新到要将更改放入其中的分支。
  • 用于hg revert -r <branch you want to merge> --include <files to update>将这些文件的内容更改为它们在另一个分支上的方式。
  • 用于hg commit将那些更改作为新更改集提交到分支。

至于问题2,我从不使用存储库克隆来分支自己,所以我不知道。我使用命名分支或匿名分支(有时带有书签)。


3

我还有另一种选择可供您研究:Mercurial队列。

这样做的想法是,在当前工作目录的顶部放置一堆补丁程序(无提交,“真实”补丁程序)。然后,您可以添加或删除已应用的补丁程序,添加,删除,添加其他补丁程序等。一个单独的补丁程序或其中的一个子集最终可能成为新的“功能”,就像您可能希望对分支机构一样。之后,您可以照常应用补丁程序(因为它是更改)。如果您与其他人一起工作,分支可能会更有用...?


2
我不得不说,尽管想爱MQ,这似乎是个好主意,但实际上我发现它们完全不可行。在两台不同的机器上工作是一件痛苦的事-剥夺了源代码控制的一大优势。
Draemon

这是我的抱怨。您仍然无法在./.hgsub文件中添加./.hg/patches存储库。当我在通用对象之上对特定客户端进行自定义时,我使用MQ,但是最后我得到了多个命名的修补程序文件夹(patch-clienta,patch-clientb等)。这对我一个人工作很好,但是我仍然很难看到我们如何在日常工作中有效地集成MQ。克隆可能意味着克隆主存储库和3或4个补丁队列存储库。
bobpaul
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.