供应商分支,Mercurial风格?

Nat*_*ley 15 version-control mercurial branch vendor-branch

场景:购买的Web应用程序,定期更新供应商.然后,我们大量定制外观,有时添加我们自己的功能或在供应商到达之前修复错误.对于版本控制,我们每次收到新版本时都会按照"供应商分支"模型使用Subversion .这有一个额外的好处,我们有一个,版本控制,他们的系统的vanilla副本.

问题:我们想切换到Mercurial,可能会遵循稳定/默认的分支模式.如果我们只从我们的供应商处获得一个版本并从那里开始开发它,那么Mercurial就非常有意义.但是,无论出于何种原因,我都无法理解如何处理供应商的未来版本.

请求:任何有关"供应商分支"Mercurial风格的帮助将不胜感激.

Ry4*_*ase 14

使用你所描述的命名分支是一个很好的选择(虽然不是唯一的选择),但我仍然建议在众所周知的位置使用几个单独的克隆来促进这个过程.假装http://host/hg/你的安装是一个hgweb(以前的hgwebdir)(尽管ssh://也很好用,无论如何),你会有这样的事情:

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

两个单独的存储库,数据从供应商流向自定义,但从不向另一个方向流动.指名的分支default将是唯一一个vendorcustom你同时拥有defaultstable.

当您从供应商处获得新代码时,您将其解压缩到vendorrepo 的工作目录中,然后运行:

hg addremove
hg commit -m 'new drop from vendor, version number x.x.x'
Run Code Online (Sandbox Code Playgroud)

你在那个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
Run Code Online (Sandbox Code Playgroud)

然后,您将默认的本地机会与新代码丢弃相结合.如果您对合并(测试通过等)感到满意,那么您可以从本地克隆返回到http://host/hg/custom.

可以根据需要重复该过程,在您的历史记录和他们的历史记录之间实现良好的分离,并让团队中的每个人都不负责接受供应商的新代码丢弃,只关注自己只default/stable在单个仓库中进行正常设置http://host/hg/custom.

  • 我想在"hg addremove"之前的vendor文件夹中可能需要删除所有非.hg*文件,因此addremove可以正常工作. (2认同)

Rud*_*udi 9

我会使用供应商分支作为默认+稳定分支的附加分支.最后它看起来像这样:

V1----V2-------------V3---------V4     Vendor
 \     \              \          \
  D1----D2---D3--D4-D5-D6-D7-D8---D9   default
                  \           \    \
                   S1----------S2---S3 stable
Run Code Online (Sandbox Code Playgroud)

  • 对于现有项目,我将首先导入svn历史记录,然后安排分支.对于一个新项目,我将导入第一个供应商版本,并使用此提交创建供应商分支(V1).之后我会将V1合并为默认值,创建D1.在默认情况下使用一些Hacks后,我将使用第一个稳定版本(S1)创建稳定分支.每当有新的供应商版本进入时,都会在供应商分支上创建新的提交(V2,V3,V4).这些提交合并为默认值(D2,D6,D9),清理后合并为稳定(S2,S3). (3认同)