2013-10-16 23 views
0

(这是关于如何在CVS管理标准开发客户特定的发展后续问题我earlier question限制推送的内容,以避免意外推到开发分支

我们在mercurial中使用不同的分支来区分标准开发(开发我们的标准软件)和客户特定开发(开发客户特定修改我们的标准软件)。

所以,让我们说,我们有如下分支:

  • 默认(标准开发分支)
  • revision1.0(标准开发分支的bugfixing)
  • revision1.1(bugfixing的标准开发分支)
  • customerA

当客户A希望从1.0升级到1.1,我们只是revision1.1customerA(从 “revision1.0” 有一些变化的克隆)(和解决合并冲突)。到现在为止还挺好。

我想避免的是开发人员意外地将某些客户特定的代码合并到标准开发分支中。我们可以通过Java命名空间来识别“客户特定的代码”。

有没有办法做到这一点?

编辑:改变“推”到“合并”,因为这是正确的说法

+0

如果你从修订版1.1拉到customerA,我猜你正在为每个“分支”使用单独的克隆,而不是分支的mercurial定义? – Kindread

+1

更可能是我的意思是“合并”而不是拉,但我同意,目前所写的问题包含矛盾。 –

+0

正确的术语似乎是_merge_,我编辑了这个问题。 –

回答

1

您可以阻止开发商推坏提交或合并到你的“中央”资料库,但你不能从本地做他们阻止他们。因此,您可以使用例如pretxnchangegroup钩子来确保推送不会导致revision1.0分支(或克隆)中的客户特定代码,但这只会拒绝开发人员的推送。他或她在本地仍然会有不良承诺,并需要解决它。

上述评论中存在一些混淆,因为您正在混淆术语。一个合并(指定)分支之间的东西和之间的东西推之间的东西。

+0

然后用户应该能够做一个本地回滚,并能够解决问题。 – Mark

+0

还没有尝试过这个我自己,但不能他也做一个precommit钩在合并时以类似的方式捕捉它?每个开发者唯一的问题就是设置钩子。 – Kindread

+0

感谢(对大家)指出合并和推送之间的区别,也是为了解决本地/中央存储库的问题。我会仔细看看mercurial的钩子。 –

0

这不是问题的答案,但如果你使用分支而不是克隆,那么,在我的愚见中,这个问题不值得担心。

只要开发人员使用分支名称而不是修订号合并分支,并且客户分支的分支名称与其他分支相当不同,那么对于意外执行'hg merge customerA'的人来说很难。我们(12个开发团队)有一个类似的分支策略运行了几年,还没有人意外地合并了错误的分支。

在极少发生的情况下,它通常可以在一小时内解决,或者在反向提交时解决。而且,由于看起来您不会将customerA合并回任何内容,您甚至可以在该分支上执行反向提交操作以将更改返回。

0

您可能会通过不允许推动防止意外推动。 假设,有一些明智的管理员(可能是“团队”)存储库,您可能依赖使用专有的请求。这可以防止任何推动,只有主回购的管理员有权将东西拉入主回购。或者 - 如果事情看起来没有可接受的形状 - 拒绝。

彼得Hintjens建议使用专用存储库(每个目的一个回购,所以一个回购可能发挥分支的作用)。他的这个组织的原因之一就是为了防止由于进入回购而产生的意外混乱。请参阅http://hintjens.com/blog:24中的“冲突稳健性”和“隔离保证”。

请注意,这看起来适合于使用git和Mercurial,因为Mercurial会将分支名称保存为提交,所以您不能随意使用它们。