最近由于重做系统,很多东西都要重新安装,在进行到版本控制时,发现还没有写过相关资料,就索性尝试整理出一些内容出来和大家分享,Subversion的安装很多,如果本文不够详细,你可以和我联系,当然也可以Google。
如果你还不清楚版本控制系统(VCS)是什么东西,建议先参见两篇文章,版本控制入门教程:英文,中文,前一篇是原版,后一篇是中文对照的翻译,当然,如果你还想更深入的了解,这个Source Control系列的文章值得你看一看,本文对此不作更多的深入,用实际的行动搭建一个版本控制环境。
使用软件:Subversion,TortoiseSVN,AshkSVN(VS插件)
目标:在Windows系统中构建一个完整的版本控制环境,并在本机中切实的使用该版本控制,同时还在VS2010中使用AshkSVN插件来进行版本控制。
软件下载:
Subversion是Apache开源项目,用来作为版本控制的服务端,是版本控制核心,承载着所有版本控制的功能,你可以在下面地址下载到最新的Windows下的Subversion软件
http://subversion.apache.org/packages.html#windows
Mitchell个人不需要http访问我的项目文件,就不选择Apache的服务了,因此下载的是CollaNet中的Subversion 1.7.9 (Windows 64-bit),这个版本只有Subversion,并不包含Apache,安装完毕之后,只能通过svn协议访问,如果你需要http访问,请选择含Apache版本。本文仅以最小化的方式构建版本控制环境,因此关于Apache下如何配置Subversion的方法不在本文讨论范围。
TortoiseSVN是版本控制的客户端,这个软件是非必须的,因为你一旦安装完成Subversion之后,你就可以在命令行下进行版本控制的所有操作,TortoiseSVN提供UI界面来简化操作的复杂度。如果你是个命令行爱好者,请忽略此软件。你可以通过下面的地址获得该软件:
Sourceforge上TortoiseSVN项目地址:http://sourceforge.net/projects/tortoisesvn/
TortoiseSVN网站下载(连接到Sourceforge):http://tortoisesvn.net/downloads.html
AshkSVN是VS中的版本控制插件,该插件仅在VS中使用(我使用的版本是VS2010+SP1),功能和TortoiseSVN类似,只是集成到了VS中而已,如果你不使用VS来进行开发,那么请忽略此插件的相关操作。你可以通过http://ankhsvn.open.collab.net/来获取AshkSVN。
在我们下载好需要的软件之后,让我们开始搭建我们的版本控制环境。
Subversion安装:Subversion的安装非常简单,你只需要一路Next即可完成安装,如果你需要更改安装路径,在Install之前进行修改即可。
安装完Subversion之后,我们就可以进行版本控制了(file协议方式)。关于Subversion的配置方法在安装完毕TortoiseSVN之后,一并给出。
需要注意的是默认安装之后是不会启动Subversion的,如果使用Subversion频繁,这种启动方式自然难以让人接受。在这里与两个方式可以解决:
第一:将启动Subversion的工作交给系统,变成一个系统服务,让系统每次启动时自行启动Subversion,这种方法的优点是你只要配置完之后,需要使用Subversion的时候,直接使用,无需复杂操作。但缺点是,无论你能不能用到Subversion,它都在那里运行着。
第二:将Subversion配置成手动启动,在需要Subversion的时候,快速的启动Subversion即可。这种方式的优势是按需运行,缺点也明显,就是每次需要运行的时候,都需要手动操作下。
如果是多人协同开发或者Subversion不在本机的情况下,Mitchell建议使用第一种方法;如果是本机个人使用的版本控制,我更倾向于推荐第二种方法,当然,如果你觉得直接file的访问也能让你接受的话,那也是不成问题的。具体的操作方法我们稍后放出,先把TortoiseSVN安装完再说。
TortoiseSVN安装:
TortoiseSVN的安装同样简单,在确认安装路径前后一路的Next就可以让你顺利搞定。
现在已经安装完毕TortoiseSVN,Subversion。接下来要做的就是进行配置。
第一步:选定版本库根目录,进行版本控制,你需要告诉Subversion你准备那里建立版本库,因此你需要先创建一个文件夹:我建立在E:\VersionControlRoot\SVNRoot\Repositories,SVNRoot就是Subversion版本库的根目录了。
第二步:创建版本库,确定了存放的路径,自然要建立起版本库,这里有两个方法:用命令行方式或使用TortoiseSVN。
命令行方式是先要路由到第一步中的版本库根目录下,代码如下:
@echo off
REM 路由到指定的路径,而后创建版本库
pushd E:\VersionControlRoot\SVNRoot\Repositories
svnadmin create TEST_USE2
上面代码只需要将pushd路径指定成你创建的路径,后面的TEST_USE2替换成你要创建的版本库名称,一般来说,版本库是按项目名称创建,也可以多个项目公用一个版本库(不建议)。
命令行方式创建相对麻烦,而TortoriseSVN提供了UI界面的方式显得就更简单直接了。他要做的就是在根目录下面,新建一个文件夹(这个就是项目的版本库文件夹),而后,右键文件夹,在弹出菜单中选择TortoiseSVN的子菜单中的“在此创建版本库”。
新版本的TortoiseSVN会提示你是否要创建目录结构,如果创建目录结构,则在版本库中创建:trunk,branches,tags文件夹。
最后确认即可创建版本库。其功能和命令行一样,只是用图形化的操作简化了操作难度。
第三步:有了根目录,有了版本库,我们应该访问试试了,但遗憾的是,我们此时访问的话是这样的:
我们说好的svn协议呢?怎么变成file了?是的,这是因为我们没有启动svnserve来承载svn协议,现在是该我们动手配置svnserve(Subversion)的启动项的时候了。
1. 要配置成系统服务,我们需要用到sc命令,在CMD下面(在Vista后继版本,你可能需要以管理员身份运行CMD)键入如下命令:
sc create SubversionService binpath="C:\Program Files\CollabNet\Subversion Client\svnserve.exe --service -r "E:/VersionControlRoot/SVNRoot/Repositories"" displayname="SubversionService" depend=Tcpip start=auto
这句就是在Windows的命令行下创建服务的命令。
SubversionService是服务名称;
binpath,运行的程序路径,即作为服务运行的程序,里面可以包含程序启动的所需要参数,因为作为服务运行,svnserve提供service模式,所以带上--service,-r是版本库根目录,我们在第一步中已经创建的文件夹路径,注意,如果你路径中含有空格,建议使用双引号括起路径,同时你需要使用的是/,而不是反斜杆\,不然这里非常容易出错;
displayname:显示在服务列表中的名字;
depend:这个是依赖服务
start:启动模式
如果上面的命令运行成功,那么,你只需要用:net start SubversionService来启动服务了,当然,第一次需要,下次你就不用手动启动了,net stop SubversionService是来停止服务的命令。
2. 配置成手动启动的方式就是将下面代码保存为RunSubversion.bat,并保存到Subversion安装目录下,并要于svnserve.exe同目录。
@echo off
REM #run svnserve.exe to handler svn protocol visit.
svnserve.exe -d -r E:/VersionControlRoot/SVNRoot/Repositories
上面需要注意的是,你需要将-r 后面的路径改成你自己第一步创建的路径,当然,如果有空格,请注意双引号。
-d 是以daemon模式运行。
之后在程序菜单中新建一个快捷方式,连接到RunSubversion.bat。如果要启动svnserve只需要单击即可,关闭弹出的CMD即可停止。
第四步:权限
如果你不使用svn协议或者http协议(本篇只有svn),只是用个file啥的,权限就是浮云了,忘了权限这档子事情,好好玩去吧。
权限的控制在Subversion中涉及到两个地方,第一个是Subverion在当前系统用户下的AppData中有个Subversion目录,里面有servers,config,hairstyles文件,这可以配置Subversion的运行时配置项,这个在以前讲如何清除Subversion账户密码一文中有提到过。第二个地方就是在每个版本库中有个conf文件夹,文件夹内有authz,passwd,svnserve.conf三个文件。
权限的操作也将围绕这两个地方来进行,一般的配置都是针对第二个地方,即单个版本库的conf文件夹内文件进行配置来达到权限的控制。由于时间关系,这次简单的讲解单版本库的权限控制,多版本可以依此类推。
authz文件是文件权限控制核心,名字就是验证嘛,这里简单翻译下文件内容。
#别名设置
#如果你要登录的用户名异常复杂,那么为用户名配置别名绝对是个好主意
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
#组别设置
#对单个用户的权限配置总是显得麻烦,按组的方式控制一组的权限就显得比较简单直观了,那么将那些拥有同样权限的用户放入同一个组中吧。
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
#当前版本库路径权限设置
#设置组(前缀@),用户或别名(主意要&前缀)的权限,r为read(读),w为写,空为无权限,路径是你版本库中的路径
# [/foo/bar]
# harry = rw
# &joe = r
# * =
#这个是多个版本库控制的时候针对某个版本库路径设置的权限
#指定版本库名称,路径
#权限设置和上面设置一样
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
在authz文件中设置的用户,咱怎么也得设置它的信息的(密码),那么当前版本库中这个用户的密码就需要在passwd这个文件中设置了。文件内容说明如下:
#这里是用户密码表
#密码表中每个用户一行,#号是注释,没有的用户从这里删除即可
#密码使用的是明文
[users]
# harry = harryssecret
# sally = sallyssecret
而svnserve.conf文件是三个文件中最重要的一个,他告诉svnseve要到哪里取得信息,解释如下:
#大段的注释这里已经删除,找到对应必须的行删掉注释即可
#一般设置
[general]
#这里设置匿名访问的权限,none为不给权限,read是读,write是写。
# anon-access = read
#设置认证用户的权限,为了能够使用authz中的权限,不建议启用这行
# auth-access = write
#这里设置密码库所在路径,以当前路径为基本路径,因为我们启用的密码表就在同目录下,因此直接取消注释即可,如果使用的是其他路径,请填写绝对路径。
# password-db = passwd
#用户认证文件,同样,取消注释就可以使用同文件夹下的authz文件
# authz-db = authz
#这里是版本库的名称,如果你是直接使用,可不启用
# realm = My First Repository
#这个设置表示是否启用用户名的大小写验证,none吧
# force-username-case = none
#这个设置和我们暂时没有关系
[sasl]
从上面解释之后,我们要设置权限就变得简单了,首先,设置svnserve.conf文件,禁用匿名访问,让密码和认证文件指向同目录的两个文件;而后在密码(passwd)文件中添加你要的用户名和密码;再次,在认证(authz)文件中,添加该用户对版本库的访问权限即可。
更多的权限配置,看以后有时间在另起一篇详细讲解吧。
第五步:AshkSVN安装
这个的安装非常简单,安装完毕之后,直接在VS中从Subversion加载文件即可。——注意,这个时候你应该已经启动svnserve,不然无法使用svn协议访问。
在第一次加载的时候,会要求选择本地保存路径,其功能就是先将Subversion上的项目迁出到本地进行编辑,而后在文件改变之后,在VS中直接提交而已。
迁出之后,修改文件,保存,之后右键提交即可完成文件的提交。
总结:
Subversion构建的版本控制环境到此就初步完成,更多细节的深入足够书写一本书来描述。我们使用Subversion来操作版本库,客户端我们使用TortoiseSVN来改善Subversion原有的命令行操作。在实际的开发中,我们会使用各种IDE插件来完成(此处是AshkSVN)类似TortoiseSVN的功能。如果你只是做文件的备份,那么,直接使用TortoiseSVN在文件中操作即可。