在svn中提供了一个非常好的功能叫做外部定义,简单的说就是可以把外部的svn版本库映射到一个目录。这是一个本身很简单的功能,但是他却能给svn的使用和管理带来很多多变的功能。
首先详细的解释一下外部定义这个功能吧。我们用一个用户的使用场景来说明一下。说的尽量的详细,所以比较啰嗦:)。
假设现在有两个团队,一个是开发组(dev-team),一个是文档组(doc-team),共同开发一个产品。这两个小组各自有各自的管理等等原因,所
以分开使用svn比较好,所以共有两个svn版本库,dev-svn和doc-svn。我们假设这两个版本库都使用标准的组织结构(详细对组织结构的讨论
请看以后的文章),现在的开发都是在trunk进行的。开发组,trunk下的目录组织为src,lib,build等等。
对于两个小组的开发,测试,管理,分开使用没有任何问题,也不会相互的有影响。但是面对最终产品发布的时候,要做安装程序,这时候就必须同时操作两个项
目。而很明显的一个普遍的组织结构就是doc-team开发的文档作为dev-team开发的程序等等的一部分。那么在dev-svn的trunk下,就
应该有一个叫做doc的目录,目录的内容是doc-svn的trunk的内容。
此时,我们就可以利用svn的外部定义功能来完成这个任务。svn的外部定义,其实是给(父)目录加上的一个 属性(svn properties,详情后文介绍),这个属性定义了要引用哪个外部的版本库并且放在(父)目录下的哪个(子)目录中。
给父目录添加一个叫做svn:externals的属性,属性的内容是doc-name svn-url,svn-url表示要引用哪个svn的连接,doc-name表示这个引用放在哪个目录下
在上面的场景中,我们要给dev-svn的trunk目录设置一个属性sv:externals,属性的值是doc
http://doc-svn/trunk,这样当你设置完之后,update一下本地工作区,biu的一下,doc就过来了,这时候从dev-svn的
trunk的角度看,就有了完整的内容,包括doc。
完整的命令是,在chechout下来的dev-svn的trunk目录下
#svn propset svn:externals “doc http://doc-svn/trunk” .
propset,表示使用propset命令,添加属性
svn:externals,表示要添加svn:externals属性
“doc http://doc-svn/trunk”,表示要给这个属性添加的值,因为这个属性包含空格,所以要用双引号括起来
之后的点,表示要把这个属性添加在本目录上
啰嗦了一通,想必大家看的也是云山雾罩的,自己做个试验就可以了。
一些高级的外部定义的用法,我们对一个目录不但可以定义一个外部定义,还可以定义多个。比如doc来自doc-svn,website来自web-svn等等。这时候我们需要把这些东西都作为svn:externals的属性值。
doc http://doc-svn/trunk
website http://web-svn/trunk
注意!这里是需要换行的,这个对于命令行来说,是非常痛苦的,而且外部定义这种值里面还包含空格的需要用双引号括起来的值来说,就是痛苦死了。好吧,我承认我到现在也没有成功的设置过。怎么办?好吧,我们可以用另外的方法来搞定。
svn propset这个命令可以使用一个外部文件的文件内容作为给属性添加的值。命令如下
svn propset svn:externals -F filename .
所以,一般的,凡是需要用到这类用法的地方,我都会生成一个文件叫做LINKS,放到svn上管理。LINKS的内容如下
doc http://doc-svn/trunk
website http://web-svn/trunk
这样我们就可以使用svn propset svn:externals -F LINKS . 这个命令来设置了。
对属性的替换,直接set一个其他的值就好了。可是,如果我们不想要这个外部定义了怎么办?注意!这里千万不能使用svn del命令(比如在dev-svn的trunk目录下执行svn del doc),这样你删除的不是这个外部定义,而是你引用的svn版本库的内容。如果很幸运的,你是在另外的项目有写入的权限,好了,恭喜你,你已经把那个项目咔嚓掉了。
正确的做法是使用svn propdel命令来删除掉svn:externals这个属性
svn propdel svn:externals
最后还要提醒一点,这个属性是放在这个目录上的,对于svn来说,目录也是受到管理的,目录和目录内的文件之类的是不同的。所以你如果只想对这个目
录进行操作,而不像对它下面的文件进行操作,使用svn的时候,记得加上-N参数。比如类似svn:externals这样的属性就是针对目录的。
其实外部定义,还有很多的高级的使用功能,具体的我就不详述了,请参阅svn的帮助或者阅读文档,http://svndoc.iusesvn.com/svnbook/1.2/svn.advanced.externals.html。 最新的文档(针对1.4,1.5的)是英文的,嘿嘿。
外部定义还有一些玩法,更多的还是在使用在基于svn管理的项目组织上,这个我会在以后的文章进行说明。
相关推荐
从 1.7 版开始,Subversion 在工作副本的根目录中使用一个集中的 .svn 文件夹(新格式代码名为 )。 我编写了这个简单的 shell 脚本,因为早在 2013 年 2 月,我找不到任何可以: 递归下载所有子目录 下载所有 ...
frsi info -R-相关日志文件--propget svn:externals --xml (第一次使用--log选项运行会很慢,因为它需要缓存整个存储库日志。)支持标准SVN身份验证选项。 Windows用户:此工具需要subversion命令行工具:...
下注:使用svn revert 提交你得修改 检验历史 svn log svn diff 比较本地修改 比较工作拷贝和版本库 比较版本库与版本库 svn cat svn list 关于历史的最后一个词 其他有用的命令 svn cleanup svn import 摘要 4. ...
下注:使用svn revert 提交你得修改 检验历史 svn log svn diff 比较本地修改 比较工作拷贝和版本库 比较版本库与版本库 svn cat svn list 关于历史的最后一个词 其他有用的命令 svn cleanup svn import 摘要 4. ...
## Development只需将以下内容放入OFBiz实现的hot-deploy文件夹的svn:externals属性中以进行签出: ups 更新了热部署文件夹(以执行从存储库中签出)后,您将需要再次构建OFBiz(./ ant构建)并加载种子,种子...
Subversion复制命令“ svn cp”不将svn:externals包含在副本中。 在创建分支或标签期间,此行为有时会导致错误。 svn-deepcopy工具通过在分支或标记中包含外部引用来解决此问题。 与其他工具相比,svn-deepcopy保留...
您想要将一个项目从一个svn存储库复制到另一个。 您没有管理员权限。 您不需要历史记录,但确实需要svn:externals和svn:ignore设置。 svnforeigncopy进行救援!
使用 svn:externals B.6.2. 使用嵌套工作副本 B.6.3. 使用相对位置 B.7. 创建到版本库的快捷方式 B.8. 忽略已经版本控制的文件 B.9. 从工作副本删除版本信息 B.10. 删除工作副本 C. Useful Tips For Administrators...
sfHttpHeaderCachePlugin 目标 该插件旨在坐在Symfony的内置缓存配置之上,以提供一种通过...首先,以常规方式安装插件(使用cli或使用svn:externals)。 接下来,将您的factory.yml设置为使用插件提供的sfHttpHea
使用 svn:externals B.6.2. 使用嵌套工作副本 B.6.3. 使用相对位置 B.7. 创建到版本库的快捷方式 B.8. 忽略已经版本控制的文件 B.9. 从工作副本删除版本信息 B.10. 删除工作副本 C. Useful Tips For ...
svn图文教程-宋正河整理 svn图文教程-宋正河整理
使用svn:externals B.6.2. 使用嵌套空作拷贝 B.6.3. 使用相对位置 B.7. 创建到版本库的快捷方式 B.8. 忽略已经版本控制的文件 C. 管理员 C.1. 通过组策略部署 TortoiseSVN C.2. 重定向升级检查 C.3. 设置 SVN_ASP_...
svn:externals 30 3. Organizing with Modules ................................................ 31 Files and Directories 32 Module Boundaries for Namespacing 33 ActiveRecord Associations Between Modules ...
3.2.6. 使用 svn+ssh 认证 ........................................... 28 3.2.7. svnserve 基于路径的授权 ...................................... 28 4. 版本库 ................................................
SVN Externals....................................................................................................................20 PEAR Installer.........................................................