Apache和Subversion搭建安全CVS
在开源软件的开发过程当中,由于开发方式自由和开发人员分散这些特性,版本控制问题一直是关系到项目成败的重要问题。没有版本控制系统的支持,开源软件的开发过程就是混乱和不可控制的。 长期以来,CVS作为一种普遍采用的开源版本控制工具,在很多的开源软件项目当中充当了重要的角色。在Eclipse当中,更是把CVS作为一个默认的插件,与Ant,JUnit等工具并列在一起,成为Eclipse软件开发的基本工具。近年来,随着开源社区的发展,一种功能更加强大的开源版本控制工具逐渐进入了人们的视野,那就是Subversion,凭借着更为优秀的特性,Subversion正在逐步取代CVS,成为新一代的开源版本控制工具。 相比CVS,Subversion中的目录、文件以及改名等元数据都是被版本化的,例如文件的改名、拷贝等等操作;而且,在Subversion中,提交操作是不可分割的,修订版本号是基于每次提交操作而非文件;另外,Subversion可以独立运行,有着轻量级的分支(Branching)与标签(Tagging)操作,版本库可以采用数据库(BerkeleyDB)或者是使用特定格式的文件进行存储,对二进制文件进行处理更为有效;最后,Subversion工具以及相关插件都有着很好的国际化支持,可以支持包括简体中文在内的多种语言版本,方便全球各地的开发人员。这些优秀的新特性,使得Subversion成为开源社区目前的最佳选择。 对于普通用户,即应用程序开发者而言,尤其是对Eclipse的用户而言,Subversion的使用十分的简单。通过官方提供的Eclipse插件Subclipse,用户可以在Eclipse里面很方便的使用Subversion客户端的各项基本功能。具体的客户端设置和使用方法,请参考Subversion官方网站和Subclipse官方网站。简单说来,在Eclipse中使用Subversion插件的基本功能,如更新、提交、同步、分支等等,基本上同使用Eclipse自带的CVS插件一模一样,这样,用户就可以从CVS方便的转移到Subversion。 目前,Subversion已经升级到1.3.2版本,相关下载、特性说明和详细使用手册可以在Subversion主页上找到。 有了简单易用的客户端,大部分的用户都可以轻松使用Subversion了,不过,作为服务器端的管理人员,还必须进一步了解服务器端的基本配置管理,才可以充分利用Subversion的各项优秀特性。 Subversion的版本库(repository),就是位于服务器端,统一管理和储存数据的地方。本文中,我们以Linux为例,介绍在服务器端配置和管理Subversion版本库的基本方法。 要创建一个版本库,首先要确定采用哪种数据存储方式。在Subversion中,版本库的数据存储有两种方式,一种是在BerkeleyDB数据库中存放数据;另一种是使用普通文件,采用自定义的格式来储存,称为FSFS。 两种存放方式各有优缺点,读者可以参考http://svnbook.org/上面的文档来了解两者详细的比较和区别,这里,我们仅引用上述文档当中的简单对照表,给出一个简明的比较。 表1两种版本库数据存储对照表 特性 | BerkeleyDB | FSFS | 很敏感;系统崩溃或者权限问题会导致数据库“塞住”,需要定期进行恢复。 | 不敏感 | | 不能 | 可以 | 不能 | 可以 | 不能 | 可以 | 稍大 | 稍小 | 无限制 | 某些本地文件系统在处理单一目录包含上千个条目时会出现问题。 | 较慢 | 较慢 | 较快 | 可以 | 较慢,但时间被分配在整个提交操作中 | 较快,但最后较长的延时可能会导致客户端操作超时 | 对于用户的umask设置十分敏感,最好只由一个用户访问。 | 对umask设置不敏感 | 2001年 | 2004年 |
确定了具体的数据存储类型,只要在命令行当中执行svnadmin命令就可以创建一个Subversion版本库,命令如下
如果一切正常,命令执行后不会有任何反馈信息而迅速返回,这样,一个新的版本库就被创建出来了。我们来查看一下生成的版本库结构:
其中,conf目录下存放了版本库的配置文件,包括用户访问控制和权限控制等内容,文件本身的注释说明十分详细,读者可以根据注释自行配置;dav目录是提供给Apache相关模块的目录,目前为空;db目录下存放着Subversion所要管理的所有受版本控制的数据,不同的存储方式(BerkeleyDB或者FSFS)下有着不同的目录结构,不过我们一般不用直接修改和查看这个目录下的内容,Subversion的命令可以安全的操作这个目录;另外,hooks目录存放着钩子脚本及其模版(一种版本库事件触发程序),locks目录存放着Subversion版本库锁定数据,format文件记录了版本库的布局版本号。
源代码网供稿.