每个项目中,源代码的版本控制是不可少的,不敢想象如果一个没有好的版本控制的项目会是什么样,一定是Source管理异常混乱的那种。常用的版本控制工具以前有2种,分别是微软的VSS,开源的CVS,现在则有了强大的SubVersion。
以前做项目一般用CVS比较多,毕竟免费么,不过CVS有个比较大的遗憾就是管理文档有点力不从心,特别是文件名或者文件夹名中带有汉字的时候,如果某些汉字的第一个字节的编码正好和CVS中的有些关键字符一致的话,那么就会出现文件夹名乱码的情况,这个情况以前我也被困扰过,后来干脆用了微软的VSS解决掉的。
VSS管理文档不错,不过由于不支持多用户同时checkout和merge的功能,所以在开发项目中还是觉得有点不便,好像在Visual Studio 2005中附带的VSS可以有支持Merge的功能了,不过自己没有用过,也就不再忘加评论。
这里着重说一下SubVersion,以前这东西我只是听说过,也从SourceForge上把Spring的最新的源代码给checkout下来过,不过具体怎么建立Subversion还都没有研究过。今天一时兴起,看了帮助文档还有一些资料,成功配置了Subversion,也把Subversion和Apache Server进行了整合。
首先安装Apache Server,我装的是2.0.59版本的Apache,据说别的低版本的Apache Server可能会运行有问题,不过用这个版本的Apache Server应该比较好。第二安装SubVersion,在Google很快就可以搜索到SubVersion的安装文件下载。先安装好Apache Server 再安装Subversion的话,在SubVersion中就会自动更新Apache Server的httpd.conf配置文件,否则的话,我们需要自己手工修改配置文件,修改如下。
首先需要添加如下两行
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module "C:/Program Files/Subversion/bin/mod_dav_svn.so"
LoadModule authz_svn_module "C:/Program Files/Subversion/bin/mod_authz_svn.so"
其中,前两行只要把原来注释符号去掉就好了,后面两行subVersion的so文件需要自己手动指定。
然后在Apache的httpd.conf中还要增加如下一段
<Location /svn>
DAV svn
SVNParentPath D:/svn
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile D:/passwd
Require valid-user
</Location>
其中/svn代表用http的访问路径,D:/svn指定了svn的存放路径,AuthType Basic代表采用Basic方式进行认证,认证的用户名密码文件是D:/passwd ,其中只允许认证的用户才能访问。passwd文件的创建比较简单,利用Apache的bin目录下的htpasswd.exe来生成,比如htpasswd.exe -c passwd xudl这个命令,就会在当前目录下创建一个passwd的文件,其中新建一个用户,用户名是xudl,在后来的命令提示里面会让你输入密码的,等密码得到确认以后,一个passwd文件就完成了。
把刚才的passwd文件复制到D:根目录下,因为在刚才Location中有这么一个配置AuthUserFile D:/passwd,所以把passwd文件放在了相应的位置。
这个时候服务器都配置完毕,开始要导入一个仓库到SVN中了,在命令行下输入
svnadmin create /svn/repos,然后就会建立了一个repos仓库。这个时候用浏览器输入http://127.0.0.1/svn/repos 以后,在正确输入用户名密码以后,就会看到一个SVN的list画面,这个时候仓库是空的,所以一个文件都没有。我们现在开始导入工程,采用如下的命令
svn import . file:///svn/repos --message "Initial repository"
就可以把当前的目录倒入到仓库中了,再用svn co file:///svn//repos 就可以把刚才倒入的souce给重新checkout出来了。
在导入以后再用浏览器访问http://127.0.0.1/svn/repos ,然后就可以看到你刚才checkin的东西了。自此,我们的SubVersion配置初步完成。