最近在与人合作的项目中使用了Zend Framework。为保证项目稳定性和方便发布,合作者把框架导出(export)到他的版本库然后提交(check in)。因为ZF框架的文件大量频繁的更新,他放弃了从框架版本库导出(export)的本地版本库同步到版本控制服务器上的办法,每次更新框架的时候都从版本库中删除框架然后重新添加,
这在我看来是在是低效的,特别是考虑到这会让他从开发分支合并到产品分支非常困难。(删除并重新添加目录会在一定成都影响合并)我想会有更好的办法。
曾经听说过svn:externals属性,但是从来没有使用过。既然有这个属性,肯定有一个适合运用他的条件。问题是SVN电子书中 svn:externals说明文档 部分并没有说明这个属性该怎样设置,而且我发现很多”怎么做”条目都省去了一个或多个重要的细节。通过一些实验、排除一些自己的错误,最后我终于知道怎么弄了。因此我现在来分享这个处理过程,希望大家也能够从这次经历中得到经验。
事实上相当容易,假设你的你的项目文件系统结构想下面这样子:
project/ branch/ production/ tag/ trunk/
- 在trunk目录下执行如下命令:
svn propedit svn:externals .
- 运行命令后会调用编辑器编辑属性。在编辑器打开的文件中,每行代表一个你要从那里取得代码的不同的外部svn仓库。一行中的第一段代表你想让取回代码存放的目录,最后一部分是取得代码的svn版本库URL。中间你还可以用一些可选配置参数来决定要取回的版本。以下是一些例子:
- 取得Zend Framework仓库的当前版本(head)::
framework http://framework.zend.com/svn/framework/trunk
- 取得Zend Framework仓库的版本2616:
framework -r2616 http://framework.zend.com/svn/framework/trunk
- 取得Zend Framework仓库的当前版本(head)::
- 保存文件退出编辑器,更新版本库:
svn up
- 提交所做更改:
svn commit