Subversion初体验
授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/30)的形式标明文章原始出处和作者信息及本声明。Subversion是新一代的版本控制系统,其设计目的是为了替代CVS,并且同样是免费的协议,贡献给开源社区。
The goal of the Subversion project is to build a version control
system that is a compelling replacement for CVS in the open source
community. The software is released under an Apache/BSD-style open source license.
现在正在使用CVS,计划转移到Subversion下,因此要先试一试。和它配套的客户端软件不再是Wincvs了,而是TortoiseSVN,从官方网站的域名看,似乎是一家人。
目前的最新版本是Subversion 1.2.0,TortoiseSVN 1.2.0.3602,我的安装平台是WinXP sp2。
安装前需要安装Apache和Python,这些我好像都有了:-)。
安装Subversion
从这里下载了Win下ZIP版的文件,直接解压到h盘。解压就OK了?没几个文件啊,看了看安装说明,应该是这样,说明中还讲了如何更新svn:
svn co http://svn.collab.net/repos/svn/trunk svn
这个命令会将最新的svn源文件下载到svn目录中。试着更新了一次,下来很多文件,我的水平是看不懂了,只知道里面有Python、C、Html文件什么的。
创建Subversion服务器
建立Repository目录
md h:/svn
创建Repository
svnadmin create h:/svn/Fwolf
接下来就可以导入、导出项目了
svn import h:/temp/project file:///h:/svn/Fwolf -m "项目初始化"
svn checkout file:///h:/svn/Fwolf h:/project
这个是针对h:/temp/project目录下的所有项目(一个目录一个项目)的导入、导出,而我则想从CVS导入项目。
导入CVS服务器的内容
从这里下载cvs2svn,这是一个Python编写的工具,用于把CVS的Repository转换成SVN的Repository,但并非是在两者之间进行同步。目前的版本是1.2.1。
cvs2svn有多种转换方式,在这里我选择全盘转换。其它的使用方式还有诸如不转换TAG和BRANCH、不要LOG等等。
cvs2svn需要RCS `co`或者CVS才能正常工作,谁知道这两个是什么东西,看起来好像和CVS采用的文档格式解析有关系,我选用了RCS,它也有Windows下的Bin包(里面的一个rcslib.dll文件也要解压,co.exe需要这个文件)。还需要GNU sort,刚开始我不知道,结果在pass 3就出现了错误:
—– pass 3 —–
Sorting CVS revisions…
输入文件指定了两次。
Command failed: "sort -T . ./cvs2svn-data.c-revs > ./cvs2svn-data.s-revs"
GNU sort的Win32二进制版本可以在http://unxutils.sourceforge.net/找到。sort.exe只有38k,但为了下载它却需要下载3M多的UnxUtils.zip。
执行以下命令进行Repository的转换:
c:/python23/python h:/cvs2svn-1.2.1/cvs2svn –existing-svnrepos -s h:/svn/Fwolf h:/cvsroot/Fwolf
需要注意的是,在原CVS的Repository中不能有中文的文件名,否则转换会出错。–encoding=ENC参数是解决这个问题的,但不知道怎么用,也不知道是否支持中文。经过一段时间的等待,转换终于成功完成了:
cvs2svn Statistics:
——————
Total CVS Files: 650
Total CVS Revisions: 2343
Total Unique Tags: 11
Total Unique Branches: 3
CVS Repos Size in KB: 445396
Total SVN Commits: 794
First Revision Date: Wed Apr 02 16:14:39 2003
Last Revision Date: Mon Jun 13 22:27:01 2005
——————
Timings:
——————
pass 1: 3 seconds
pass 2: 0 seconds
pass 3: 0 seconds
pass 4: 0 seconds
pass 5: 2 seconds
pass 6: 0 seconds
pass 7: 0 seconds
pass 8: 192 seconds
total: 199 seconds
接下来,要把SVN配置到Apache中
拷贝mod_dav_svn.so、mod_authz_svn.so、libdb43.dll、libeay32.dll、intl3_svn.dll、ssleay32.dll到Apache的modules目录,在httpd.conf中增加:
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
然后重启Apache,注意前两句涉及的模块是Apache的自带模块。我在这里的时候一开始总是Apache重启出错,提示
The Apache service named reported the following error:
>>> Cannot load H:/server/Apache2/modules/mod_dav_svn.so into server: 找不到指定的程序。
或
The Apache service named reported the following error:
>>> Cannot load H:/server/Apache2/modules/mod_dav_svn.so into
server: xd5xd2xb2xbbxb5xbdxd6xb8xb6xa8xb5xc4xb3xccxd0xf2xa1xa3
在这么炎热的夏天,我鼓捣了一下午才发现问题之所在,第一个错误信息是Apache 2.0.48的,第二个错误信息是Apache
2.0.52的,这两个版本的mod_dav.so可能有些问题,更新到2.0.54就可以了,当然那几个DLL文件也要复制的。如果还提示缺少
libhttpd.dll,这个文件在Apache的bin目录下,自己找就可以了。相信很多人和我一样卡在这里:-(。
(后来又想,是否还有另外一种可能导致Apache出错,那就是前两个版本我都是直接复制的文件,而最后那个是使用MSI进行安装的,是否由于这个原因导致mod_dav出了问题呢?)
在Apache中添加虚拟目录的映射
在httpd.conf中增加:
<Location /svn/project1>
DAV svn
SVNPath h:/svn/project1
</Location>
其中project1是一个Repository的目录名,这样就可以使用网址http://localhost/svn/project1/来访
问SVN文件了。还有一种方式是直接将SVN的根目录定义为Apache的虚拟目录,这样它下面的每个Repository都可以通过类似上面的URL来
访问了,不用一个一个的重复定义,类似:
<Location /svn>
DAV svn
SVNParentPath h:/svn
</Location>
这样我同样可以使用http://localhost/svn/project1/来访问Repository。(但这样的话,http://localhost/svn/无法访问,403 Forbidden错误,不知如何解决。)
“DAV svn”不能变,它是用来说明“说明Apache会使用svn这个module来解析这个虚拟目录”,其余的可以根据具体情况调整。
这篇就到这里吧,关于SVN的使用、虚拟目录的权限设定网上都有很多文章了。
另外一点就是,由于在Repository中每个Revision都会形成一个文件,所以我担心Revision多了之后,存取文件的效率会降低,因此,我认为采用每个项目在单独的一个Repository中存储的方式会更好些。
(pLog无法输入反斜杠,因此在DOS命令中我只能输入/来代替)
No tags for this post.
Save to Browser Favorites
Ask
backflip
blinklist
BlogBookmark
Bloglines
BlogMarks
Blogsvine
BUMPzee!
CiteULike
co.mments
Connotea
del.icio.us
DotNetKicks
Digg
diigo
dropjack.com
dzone
Facebook
Fark
Faves
Feed Me Links
Friendsite
folkd.com
Furl
Google
Hugg
Jeqq
Kaboodle
linkaGoGo
LinksMarker
Ma.gnolia
Mister Wong
Mixx
MySpace
MyWeb
Netvouz
Newsvine
PlugIM
popcurrent
Propeller
Reddit
Rojo
Segnalo
Shoutwire
Simpy
sk*rt
Slashdot
Sphere
Sphinn
Spurl.net
Squidoo
StumbleUpon
Technorati
ThisNext
Webride
Windows Live
Yahoo!
Email This to a Friend
If you like this then please subscribe to the
September 8th, 2006 at 19:18:15
不错,
刚装上
蓝德科技–网站建设专家
[Reply]