http://hi.baidu.com/patrolsun/blog/item/251659c2f40e1e32e5dd3bde.html
http://blog.csdn.net/momokun/archive/2009/03/10/3977880.aspx
Subversion(SVN)是一个开源的版本控制系统,它可以记录文件的所有修订版本,但没有图形化的操作界面,所以需要安装 TortoiseSVN,tortoiseSVN只是svn的一个图形化的操作界面,有了这两个,就可以建立起强大的svn服务器了。但是如果想通过 http的方式访问,则需要使用apache2.2.x,并将svn的一些模块集成进去。ankhSVN则可以实现SVN+Visual Studio的远程代码管理。
Subversion,TortoiseSVN,ankhSVN,apache这些都是开源软件,建议大家在使用前都去下载其最新的版本,注意SVN要下载for apache的版本,不然会没有挂载到apache上的一些相关配置文件。
1.使用SVN+TortoiseSVN构建SVN服务器.
这两个程序安装起来都比较容易,TortoiseSVN安装需要重启一次机器,安装好后,在D盘建立起svn服务的根目录,D:/svn,然后在下面建立 repos1作为一个项目的库,选中该文件夹,右击鼠标,选择TortoiseSVN>Create Repository here…然后是选择版本库的模式,默认选择FSFS即可,这是一种比较新的文件版本模式。
建立好库之后,则要启用svn的服务,可以运行cmd在命令提示符中键入 svnserve –daemon –root D:/svn 回车,命令作用是启用svn服务器,并设置svn服务器根目录为D:/svn,这样就运行起了svn服务,特别要注意这个窗口不能关闭,一旦关闭也就停止 了svn服务。
然后鼠标右击打开TortoiseSVN>Repo-browser来查看刚才建立的版本库,在URL对话框中输入svn://Localhost/repos1,如果可以查看到repos1这个空库则说明svnserve已经正常工作了。
然后我们为它配置用户权限,如果所有来访者都能对版本库进行修改,那就乱套了。
用文本编辑器打开D:/svn/repos1/conf/svnserve.conf,将
# password-db = passwd
改为:
password-db =passwd
注意前面不要有空格,然后修改同目录下的passwd文件,增加一个test帐号,在[users]这个节下面添加test=test即可,即用户名,密码都是test。
2.将项目导入版本库
项目导入版本库后,一切项目数据改动都将由该版本库进行管理和记录。选中项目所在文件夹,右击>tortoiseSVN>Import… ,在弹出的对话框”URL of repository”中输入”svn://localhost/repos1/项目名”,在”Import message”中可以加入注释,点OK后要输入帐号密码,输入上面所添加的test用户即可,完成后,项目就导入成功了。tortoiseSVN的取 出,提交等功能在这里就不一一介绍了.导入后再用TortoiseSVN>Repo-browser察看就能看到添加的项目了。
3.用Apache架设svn服务
用Apache架设有什么好处呢?我觉得吧,可以使用http意味着可以使用固定的域名,开发的时候IP发生改变也无所谓,而且apache不会有那个不 能关掉的窗口,虽然svnserve也可以加到系统的服务里面.另外apache配置十分灵活,且具有了许多svnserve所没有的特性,当然灵活也造 成了一定的复杂性。
首先安装好Apache 2.2.x,这个不用多说,然后把subversion安装目录下的bin目录中的 intl3_svn.dll,libdb44.dll,mod_authz_svn.so,mod_dav_svn.so这几个文件复制到apache的 模块目录modules下。然后修改apache的配置文件httpd.conf来使apache加载mod_dav_svn模块。
将
#LoadModule dav_module modules/mod_dav.so
前面的”#”号去掉,然后在后面添加:
LoadModule dav_svn_module modules/mod_dav_svn.so
注意它一定要加在mod_dav的后面。
现在已经设置好了Apache和Subversion,但是Apache不知道如何处理Subversion的客户端Tortoisesvn,为了让 apache知道哪个目录是用来作为subversion的版本库,需要在配置文件httpd.conf后面添加以下代码:
<Location /repository/>
DAV svn
SVNPath D:/svn/repos1
</Location>
这个配置告诉apache首先要启动dav_module,然后加载dav_svn_module,版本库对外的URL是 http://服务器IP/repository/,Subversion版本库物理位置在D:/svn/repos1下。配置好重启apache,就可 以正常使用了。并且subversion的各种客户端也可以通过http协议访问版本库。
如果要指定多个版本库可以使用多个Location标签,也可以用SVNParentPath代替SVNPath来指定版本库的父级目录,如D:/svn下有多个版本库,repos1,repos2等,就可以使用以下代码:
<Location /repository/>
DAV svn
SVNParentPath D:/svn
</Location>
“SVNParentPath D:/svn”表示D:/svn下的每个子目录都是一个版本库,访问可以通过”http://服务器IP/repository/repos1″ ,”http://服务器IP/repository/repos2/”等来访问。
现在版本库对于任何来访者都是具有完全的权限的我们需要对其进行权限设置,这里只介绍基本的http认证。apache提供了一个htpasswd工具来 管理一个用户文件,这个文件包含用户名和加密后的密码,htpasswd在Apache的bin目录下,具体使用方法如下:
htpasswd -c E:/user/apache/passwd.conf user
其作用是创建passwd.conf文件,并建立用户user,输入命令回车后会要求输入密码。
htpasswd [-m] E:/user/apache/passwd.conf Newuser
这个用于添加新用户,-m表示密码用MD5加密。
htpasswd [-m] E:/user/apache/passwd.conf user
末尾参数为已有用户则可以用于修改用户密码。
htpasswd -D E:/user/apache/passwd.conf user
删除用户,注意参数D要大写。
然后修改apache的httpd.conf,在Location标签中加入以下内容:
AuthType Basic
AuthName “KeyPark Studio”
AuthUserFile E:/user/apache/passwd.conf
Require valid-user
AuthType Basic表示启用基本验证。
AuthName “KeyPark Studio”表示认证对话框中显示的服务器信息,这里不要用中文,因为Tortoisesvn不支持中文。
AuthUserFile E:/user/apache/passwd.conf 指示了E:/user/apache/passwd.conf作为用户文件进行验证。
Require valid-user表示只有输入了正确的用户名密码才可以访问相关路径。
验证就讲这些了,在网上还可以找到使用svn的模块进行更为细致的访问控制的设置方法,在这里就不再介绍了。
3.VS2008中使用用ANKHSVN插件
插件安装很简单,在经过以上步骤后,并且确认你已经在vs中安装好了ankhsvn插件,那么恭喜你,你已经可以在VS中使用svn的强大代码管理功能 了。首先打开Visual Studio,点击 File(文件)你将会看到多出了Subversion选项,点击Open from subversion…URL中输入http://服务器IP/repository/repos1,然后会提示输入http认证的用户名和密码,输入确 定后就可以看到已经创建好的项目了选中要打开的项目.sln文件打开,然后需要制定一个本地存放路径,设定好后点击OK,就可以看到程序从服务器传到了本 地。
在程序修改时一般操作流程及方法
打开项目,首选点update,更新为最新版本:
然后对需要修改的程序文件,进行锁定:
并且可以加入提示信息:
修改后更新程序:
注意两个提交,用下面的提交后,仍然锁定程序,上面的提交,在提交后自动解除锁定。
另外,在提交前最好加上注释,在上面的界面中点击如下按钮可以在message中输入备注信息。
手动解锁:
查看修改编码者信息:
查看版本历史:
比较版本点击diff:
撤消未提交的更改:
查看待提交信息:
Change列的不同状态,代表不同的含义,具体如下:
New 表示新增加的文件,还没有增加到版本库中。
Added 表示已经使用ADD功能,但是还没提交.
Edited 表示已经修改但还没保存.
Modified Edited状态保存之后的状态.
Conflicted 有冲突时的状态
Deleted, Copied 改名之后,列示的状态。Deleted也表示删除文件的状态。