首先介绍一下SubVersion,SubVersion是一种开放源代码的全新版本控制系统,支持本地访问或者通过网络访问的数据库和文件系统存储库。不但提供了常见的比较、修补、标记、提交、回复和分支功能,还增加了追踪移动和删除的能力。基本与CVS类似。
下面开始实战过程:
SubVersion与CVS一样,也是很典型的C/S系统,所以使用前需要安装相应的服务器和客户端软件。
下载地址:http://subversion.tigris.org/ ,进入该页面后点击左边的Downloads链接,
下载:Win32 packages built against Apache 2.0 (建议最好下载该版本,为了后面配置的兼容性),选择svn-1.4.4-setup.exe,该文件是SubVersion的安装版本,当然你也可以选择解压缩版本,解压缩版本不需要安装。
下载完毕后双击该文件进行安装,该安装过程与一般的软件安装没有任何区别,选择默认即可,一路Next,最后Finish。这样我们的SubVersion服务器端软件就安装完毕了。
我们到SVN的安装目录下去看看,这里以我的安装目录为例在D:/Program Files/Subversion下面,有一个bin目录,SVN的所有可执命令都在该目录下。这里面有很多exe文件,注意:SVN的命令是给予命令行的,所以我们不能直接双击这些命令来执行他们,我们需要到命令窗口去执行他们。
SVN的服务器端如见同样包含了客户端执行的一些命令,我们可以用这些命令来晚场我们日常的版本控制管理工作。
首先我们要在服务器端建立仓库(repository)。
在安装完毕SVN后,他会将安装目录中的bin目录加入到系统path中,可以通过右点我的电脑,选择高级->环境变量,查看path环境变量的值。
因此打开命令行窗口(win+r,键入cmd),输入svn命令,系统会返回『使用“svn help”得到用法。』说明系统已经认出svn命令了。
现在我们需要创建一个仓库(repository),假设仓库创建的位置为:E:/svn/repository目录下,那么我们需要在硬盘上创建该目录。创建完后,在命令行输入:svnadmin create E:/svn/repository
在执行完命令后,SVN没有给出任何信息,这说明我们的版本库已经创建成功了,我们这时再到E:/svn/repository下去看看,可以看到SVN已经再该目录下生成了很多文件夹和文件,这些文件就是SVN进行版本管理时所需要的,我们再日常的开发中是不会直接接触到这些文件的。
现在服务器端的仓库已经创建成功了,接下来就是在客户端创建一个项目,然后将该项目import到服务器端,将其纳入SVN的管理之下。不过在创建项目之前我们首先需要启动服务器,服务器启动后才会进行网络侦听,检查到客户端的相关命令请求。
在命令行中输入如下命令:svnserve -d -r E:/svn/repository,该命令含义让SVN将此目录作为仓库,并侦听客户端的请求。其中-d的作用为后台模式,而-r的作用是为制定服务器的仓库路径。
当服务器启动后,请不要关闭命令行窗口,否则会吧svnserve的服务停下来的,接下来的操作我们可以另外打开一个命令行窗口进行。
假设我们的客户端创建的项目在E:/test/client,我们在该目录下创建一个文件夹child和一个文件test.txt,并在该文件中增加些文本。
我们首先将命令行的当前目录转到E:/test目录下,在命令行中输入如下命令:svn import svn://localhost,其中svn://localhost表示的是SVN服务器的ip地址,这里就表示是我们本机地址。另外SVN实现了自己独有的协议SVN协议,所以我们可以看到url形式是svn://这样的,这个命令的作用就是当前目录以及其所有子目录和文件imort到服务器上去,纳入SVN的管辖范围中。
执行完毕后我们发现该命令失败了
----------------------------------------------------
E:/test> svn import://localhost
svn:无法使用外部编辑器获得日志信息;考虑设置环境变量$SVN_EDITOR,或者使用--message(-m)或--file(-F)选项
svn:没有设置SVN_EDITOR,VISUAL或EDITOR环境变量,运行时的设定中也没有“editor-cmd”选项
E:/test>
----------------------------------------------------
通过命令行的说明我们看到,该命令要求我们指定好一个记录日志的文件或者在系统环境变量中增加一个SVN_EDITOR的变量。二者选一就可以了,那么我们可以增加一个SVN_EDITOR的环境变量。该变量的值我们就取为系统自带的记事本就可以了。方法同前面说的path环境变量一样。在系统的环境变量中新建SVN_EDITOR,将它的值设为notepad即可
SVN_EDITOR=notepad
注意,设置完环境变量后,要关闭原来的命令窗口,重新cmd开一个命令行窗口,从而使得刚设的环境变量生效。
同样的cd到E:/test,以此为当前目录,然后输入命令:svn import svn://localhost
当我们输入命令回车后,出现一个记事本的信息窗口,这证明了我们的环境变量的增加是正确的,关闭该记事本窗口。命令行如下:
----------------------------------------------------
E:/test> svn import svn://localhost
日志信息未修改,或未指定
a)终止,c)继续,e)编辑
----------------------------------------------------
我们选择c,继续
----------------------------------------------------
E:/test> svn import svn://localhost
日志信息未修改,或未指定
a)终止,c)继续,e)编辑
c
svn:认证失败
E:/test>
----------------------------------------------------
出现认证失败的信息,说明我们已经连接到SVN的服务器,不过服务器认为我们的客户端没有相应的权限,所以这时我们改变一下SVN的认证权限。
回到SVN仓库,即E:/svn/repository目录,我们发现这里面有一个conf目录,进入该文件夹,用文本编辑器打开svnserve.conf文件
我们看到这里是关于访问SVN仓库的一些认证设定,找到第12行:anon-access=read,这表示匿名用户的访问权限是读,并且大家注意到,该行的前面有个“#”。这表示改行是被注释掉的,这与Java的properties文件的注释方式是一致的,这也就说明了此时SVN服务器是不允许匿名登陆的,那么我们现在可以去掉“#”,不过现在客户端也只是匿名读,我们的import操作是写操作,所以我们在该行下面增加一行anon-access=write,如下面所示:
----------------------------------------------------
........
[general]
###These options control access to the repository for unauthenticated
###and authenticated users. Valid values are "write","read",
###and "none". The sample settings below are the defaults.
anon-access = read
anon-access = write
# auth-access = write
........
----------------------------------------------------
保存,关闭该文件。
这时我们需要停止当前的svnserve的服务,然后重新启动,让它接受我们的改变,转到它的命令窗口,用ctrl+c停止它,再重新启动。
svnserve -d -r E:/svn/repository
现在回到之前的命令行窗口,重新执行import命令,操作步骤如前面一样,过程如下
----------------------------------------------------
E:/test> svn import svn://localhost
日志信息未修改,或未指定
a)终止,c)继续,e)编辑
c
增加 client
增加 。。。。
提交后的版本未1。
E:/test>
----------------------------------------------------
ok!我们的import操作终于成功了。(未完待续。。。)