2010-10-22 90 views
15

现场:购买的Web应用程序,定期更新供应商。然后,我们会大量定制外观,有时会添加我们自己的功能或在供应商达成之前修复错误。对于版本控制,每次我们收到新版本时,我们都在使用Subversion的“Vendor Branch”模型。这有额外的好处,我们有一个版本控制,他们的系统的香草副本。供应商分支,水银风格?

问题:我们想切换到Mercurial并可能会遵循stable/default branching模式。如果我们只能从我们的供应商那里获得一个版本并从此开始开发,那么Mercurial非常有意义。但是,无论出于何种原因,我在围绕如何处理供应商的未来版本方面遇到困难。

请求:任何与“供应商分支”水银风格的帮助将不胜感激。

+0

发现了一个类似的情况,但对于Subversion的问题。 (http://stackoverflow.com/questions/2447591) – 2010-10-22 15:33:18

+5

有人会建议Mercurial队列(mq) - 忽略它们。准备补丁时,个人使用这项技术是一项很好的技术,但不适合您的流程的核心。 – 2010-10-22 15:56:51

回答

14

使用命名分支机构你所描述是一个不错的选择(尽管not the only choice),但我还是建议使用一些单独的克隆在众所周知的地点促进这一过程。假装http://host/hg/是hgweb(原hgwebdir)为您的安装(虽然SSH://伟大工程太,等等),你有这样的事情:

  • http://host/hg/vendor
  • http://host/hg/custom

两个独立的仓库,其中数据从供应商流向定制,但从来没有其他方向。指定分支default将是vendorcustom中的唯一一个,您将同时拥有defaultstable

当你从供应商一个新的代码降你把它解压到vendor回购的工作目录,然后运行:

hg addremove 
hg commit -m 'new drop from vendor, version number x.x.x' 

你在vendor回购历史将是线性的,并它永远不会有你写的东西。

custom的本地克隆

现在回购你会怎么做:

hg update default  # update to the latest head in your default branch 
hg pull http://host/hg/vendor # bring in the new changes from vendor as a new head 
hg merge tip   # merge _your_ most recent default cset with their new drop 

然后,你做他们的新代码滴上默认合并本地机会的工作。当你对合并感到满意时(测试通过等),你从本地克隆推回到http://host/hg/custom

该过程可以根据需要重复进行,将您的历史记录与他们的历史记录分离开来,并且让团队中的每个人都不负责接受来自供应商的新代码丢失,只关心一个正常的default/stable安装回购,http://host/hg/custom

+1

我认为这是我见过的最清晰的答案。谢谢! +1 – eduncan911 2011-10-14 15:29:15

+0

@ eduncan911谢谢! – 2011-10-14 18:30:53

+2

我认为在“hg addremove”之前供应商文件夹中可能需要删除所有非.hg *文件,因此addremove可以正常工作。 – Ken 2012-09-28 20:56:01

9

我会使用供应商分支作为默认+稳定分支的额外分支。最后,它会是这个样子:

V1----V2-------------V3---------V4  Vendor 
\  \    \   \ 
    D1----D2---D3--D4-D5-D6-D7-D8---D9 default 
        \   \ \ 
        S1----------S2---S3 stable 
+0

关于从哪里开始的任何建议? – 2010-10-22 15:31:55

+3

对于现有的项目,我会先导入svn历史记录,然后安排分支。对于新项目,我将导入第一个供应商版本,并使用此提交(V1)创建供应商分支。之后我会将V1合并为默认值,创建D1。在默认情况下,我会在第一个稳定版本(S1)中创建稳定分支。每当新的供应商版本进入时,供应商分支上的新提交就会被创建(V2,V3,V4)。这些提交合并为默认(D2,D6,D9),并在清理合并到稳定(S2,S3)后。 – Rudi 2010-10-22 16:11:38

+1

我看到这个和Ry4an的答案的优点。 eeny ... meeny ... miny ... mo ... – 2010-10-25 00:36:30