Chinaunix首页 | 论坛 | 博客
  • 博客访问: 659503
  • 博文数量: 198
  • 博客积分: 4256
  • 博客等级: 上校
  • 技术积分: 1725
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-15 13:12
文章分类

全部博文(198)

文章存档

2012年(12)

2011年(39)

2010年(135)

2009年(12)

我的朋友

分类: LINUX

2010-06-12 18:10:30

最近在与人合作的项目中使用了Zend Framework。为保证项目稳定性和方便发布,合作者把框架导出(export)到他的版本库然后提交(check in)。因为ZF框架的文件大量频繁的更新,他放弃了从框架版本库导出(export)的本地版本库同步到版本控制服务器上的办法,每次更新框架的时候都 从版本库中删除框架然后重新添加,

这在我看来是在是低效的,特别是考虑到这会让他从开发分支合并到产品分支非常困难。(删除并重新添加目录会在一定成都影响合并)我想会有更好的办法。

曾经听说过svn:externals属性,但是从来没有使用过。既然有这个属性,肯定有一个适合运用他的条件。问题是SVN电子书中 部分并没有说明这个属性该怎样设置,而且我发现很多”怎么做”条目都省去了一个或多个重要的细节。通过一些实验、排除一些自己的错误,最后我终于知道怎么弄了。因此我现在来分享这个处理过程,希望大家也能够从这次经历中得到经验。

事实上相当容易,假设你的你的项目文件系统结构想下面这样子:

project/    branch/        production/    tag/    trunk/
  • 在trunk目录下执行如下命令:
    svn propedit svn:externals .
  • 运 行命令后会调用编辑器编辑属性。在编辑器打开的文件中,每行代表一个你要从那里取得代码的不同的外部svn仓库。一行中的第一段代表你想让取回代码存放的 目录,最后一部分是取得代码的svn版本库URL。中间你还可以用一些可选配置参数来决定要取回的版本。以下是一些例子:
    • 取得Zend Framework仓库的当前版本(head)::
      framework 
    • 取得Zend Framework仓库的版本2616:
      framework -r2616 
  • 保存文件退出编辑器,更新版本库:
    svn up
  • 提交所做更改:
    svn commit

请注意一点:在svn:externals中设置的取出代码存放目录在不能是你的版本库中已经存在的目录。如果存在,你会得到如下错误提醒:

svn: Working copy 'sharedproject' lockedsvn: run ’svn cleanup’ to remove locks

上面的例子中我使用的是版本,你也可以使用标签来取得外部仓库中特殊标签的版本。两种方法都能很好的工作。

现在,当我们实现分支之间或从主干到分支之间的转换时,你可以为每个分支设置不同的svn:externals 属性。例如,你当期那的产品环境可能从某个特殊的版本中取出,但是你的主干需要跟进最新版本(head)。当你觉得可以实施这些改变的时候,你需要做的仅 仅是查到主干的版本号然后更新产品版本的svn:externals属性即可。

希望这能帮祝你了解svn:externals。

阅读(1285) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~