在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管理的项目组织上,这个我会在以后的文章进行说明。
相关推荐
使用 svn:externals B.6.2. 使用嵌套工作副本 B.6.3. 使用相对位置 B.7. 创建到版本库的快捷方式 B.8. 忽略已经版本控制的文件 B.9. 从工作副本删除版本信息 B.10. 删除工作副本 C. Useful Tips For ...
在Unix或Linux系统中,“svn link”通常指的是使用`svn:externals`属性创建软链接,这允许你在不同的SVN仓库之间建立关联。通过这种方式,一个项目可以引用另一个项目的特定版本,使得团队成员可以在各自的代码库中...
从 1.7 版开始,Subversion 在工作副本的根目录中使用一个集中的 .svn 文件夹(新格式代码名为 )。 我编写了这个简单的 shell 脚本,因为早在 2013 年 2 月,我找不到任何可以: 递归下载所有子目录 下载所有 ...
1.2 使用`svn:externals`属性自动维护 通过在主项目工作区的目录上设置`svn:externals`属性,可以指定公用模块的URL和版本号。这样,当团队成员执行`update`时,公用模块会自动同步到指定版本,且主项目的提交不会...
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:externals`属性链接版本库中的其他项目。 - **修订版本(Revision)**:每个提交对应一个唯一的修订版本号。 - **URL路径**:指向版本库资源的唯一标识。 8. **SVN客户端工具** - ...
下注:使用svn revert 提交你得修改 检验历史 svn log svn diff 比较本地修改 比较工作拷贝和版本库 比较版本库与版本库 svn cat svn list 关于历史的最后一个词 其他有用的命令 svn cleanup svn import 摘要 4. ...
2. **外部文件**:使用`svn:externals`属性链接仓库中的其他资源。 3. **修订版查询**:通过`svn log`查看修订版历史,`svn diff`比较两个修订版的区别。 4. **冲突解决工具**:高级客户端提供图形化工具帮助解决...
2. 增强的文件属性(`svn:externals`):支持更深的层次结构和相对路径,更方便地管理外部依赖。 3. 多重突变操作:允许同时对多个文件或目录执行相同的操作,如批量添加或删除。 4. 无锁编辑:在某些情况下,用户...
svn propset svn:externals "path/to/external/file" . ``` 4. **清理缓存**:清理SVN缓存信息,使用`svn cleanup`。 ```bash svn cleanup ``` 5. **查找丢失的更改**:如果在本地工作副本中意外丢失了一些...
- **单机模式**:使用命令`svnserve -d -r E:\\svn`启动服务,其中`-d`表示以后台模式运行,`-r`指定版本库路径。 - **Windows服务模式**: - 创建一个名为“mysvn”的Windows服务,使用命令`sc create mysvn ...
- **忽略文件**:使用`.svnignore`文件或`svn propset svn:ignore`命令指定不想版本化的文件。 - **外部定义**:`svn:externals`属性可将其他仓库的文件或目录链接到当前项目。 ### 十、使用CHM文件 《SVN中文帮助...
3. **外部引用**: 通过`svn:externals`属性可以方便地在工作副本中引用其他仓库中的文件或目录。 4. **属性管理**: SVN还提供了一套属性管理机制,可以用来存储元数据,例如文件的版权信息等。 #### 五、SVN的架构...
3. **提交**:使用`svn commit`将本地修改提交回仓库,需附带提交信息描述变更。 4. **差异**:`svn diff`查看本地文件与仓库版本的差异。 5. **忽略文件**:通过`.svnignore`文件设定不想被版本控制的文件或模式...
高级特性包括冲突解决、标签(快照)、属性(metadata)设置,以及如何使用svn:externals指向其他仓库的资源。此外,还涉及如何使用svn switch和svn relocate命令切换或调整工作副本的URL。 **4. 分支与合并** ...
5. CVS转SVN: - 使用`cvsexportconvert`工具,将CVS仓库转换为SVN格式。 - 创建新的SVN仓库,导入转换后的数据。 - 配置用户权限和分支策略,确保平滑过渡。 - 通知团队成员进行迁移,更新他们的工作流程。 6....