Subversion安装、配置与使用
 

2009-05-15 作者:jack86514 来源:jack86514的blog

 

此文章只代表作者一段时间的看法和观点。此文是作者原创,如第三方用于商业用途需经本人同意,转载、引用本文请注意出处。

一.为什么要进行代码控制

在软件开发的过程中,经常因为程序代码版本的不统一而导致重新开发,或者在多人开发的项目中,多人共同修改了同一个公共代码文件而导致的相互复盖的问题,诸如此类的问题还有很多,下面我们就来举一个例子。

 比如说UserA和UserB各自为自己的需求需要在公共代码文件CommonFilesA增加自己的代码段,修改完后都要把自己的代码合并到项目经理那里去,结果UserA修改了文件,UserB也修改了文件,合并的时候UserA把文件拷贝了过去,UserB在UserA后把文件也拷贝过去,这时UserA的文件其实已经被UserB复盖了,最终的结果就是UserA的代码跑不起来。通过这个例子我们知道,在多个开发共同开发一个项目的过程中,可能这样的文件很多,那么到时候就会导致搞不清楚哪些代码被复盖而导致项目文件过不了,这时我们就要花更多的时候来在代码合并上。相信这不是一个项目经理所期望的,因为这个将导致的最终结果是项目周期拉长,项目成本没有办法控制等等一系列的问题。

通过上面的例子,可能有些人会说,这只是多人开发的过程中才会出现的问题,如果一个人来做一个项目开发,这个问题就不会出现了,所以就没有什么必要来进行代码控制了,其实不是这样的,本人再次重申自己的观点,项目中代码的版本控制是一个项目成功与否的关键因素之一。下面我们就来举一个例子说明这一点的重要性,也是本人遇到的一个问题。

比如说昨天写的一个程序,编译运行都是OK的,但是今天我们在原来代码的基础上加了一些功能,我们假设这些代码量很大,结果发现编译不通过了,可是我们不知道我们今天写的是哪些代码(因为代码量很大),结果导致不知道应该如何来比较不同时间段的代码,因为可能要花上半天的或更长的时候才能回到的功能。

上面的两个例子告诉我代码版本管理是如何的重要,那么我们如何来进行代码管理呢?其实现在代码软件的工具很多,比如说CVN,以及微软的Source Safe,Subversion等等,但是具本人所知用的最多的是Subversion。下面我们就来讲解一下Subversion的安装及其使用。

二.Subversion的安装与测试

Subversion的配置方式有很多种,同时也可以配置不同的操作系统之上,本文我讲解的是Subversion 1.5.4 for Apache2.2在Windows下的安装,通过与Apache的集成,Subversion可以采用Web Http的方式提供服务,这样便于在互联网的环境下使用,提供目录及其版本控制。这里值得注意的是Subversion对不同版本的Apache支持有所不同,下载Apache的版本一定要和Subversion提供支持的Apache版本相匹配,否则将不能配置其进行正常工作,个体的请查阅Subversion官方网站(http://subversion.tigris.org/)。

  1. 安装Apache2.2

关于安装Apache2.2,你可以先到官方网站上下载其软件http://httpd.apache.org/,下载完后,先不要安装,首先要做的就是停掉IIS(如果你已经安装了的话),因为Apache2.2的安装默认要占用IIS的80端口,而这与IIS相冲突,在停了IIS之后,我们就可以点击进行安装,安装过程中一直点击下一步即可(可以设置其要安装的路径),直到安装完成。安装完成后如下图所示。

因为Apach安装默认是80端口,如果它使用了80端口话,那IIS现在就无法使用了,那么我们可以给Apache更换一个端口号,方法是打开Apache安装路径下的conf文件夹下的httpd.conf文件,在其中找到Listen 80这一行,将后面的80改成你相使用的端口号,如8000。下面我们就来测试一下看其是否可以正常工作,重新启动Apache,如下图所示:

Apache是已经启动了,那么我们怎么知道我们的设置是正常的呢?下面我们就找开IE,在其中输入http://localhost:8000/,如果你能够看到哪下界面,那么说明其已正常工作了。

  1. 安装Subversion

先到Subversion官方网站上一载Subversion 1.5.4,本人下的这个并非一个安装包,所以你要将其解压到你所指定的目录。如本人将其指定在C:\Program Files\svn-win32-1.5.4,如下图所示。

拷贝文件如下:

  1. 把这个安装目录bin里的mod_authz_svn.so和mod_dav_svn.so拷贝到Apache2.2安装路径下的modules 目录里(如本人安装路径的C:\Program Files\Apache2.2\modules)。
  2. 所Subversion目录里所有的*.dll文件及svnadmin.exe文件拷贝到Apache2.2安装路径下的bin目录里(如本人安装路径的C:\Program Files\Apache2.2\bin)。
  1. 配置Apache

打开Apache安装路径下的conf文件夹下的httpd.conf文件,找到下面两行,并把前面的#号删除(说明:#号在此文件中作为注释使用)。

#LoadModule dav_module modules/mod_dav.so

#LoadModule dav_fs_module modules/mod_dav_fs.so

然后在所有LoadModule的最下行增加如下两行:

 LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so

具体位置如下图所示:

重新启动Apache,这时其实已经将Subversion与Apache进行了初步的集成,如下图所示:

下面要做的事就是为Subversion创建一个用来存放文件的目录,比如说我们将其设定为D:\SvnServer,那么我们如何来通知Apache我们的资源路径在什么地方呢?可以通过在httpd.conf文件的最后加入Location标签来进行设置,如下所示:

 #Add below section for add the sebversion project root description

 #Update by Xiong Wei

 #Date 09 April 2009

<Location /svn>

     DAV svn

    SVNParentPath D:/svnserver

</Location>

这个时候我们的资源目录已经设计好了,下面我们就来为此创建一个项目资源文件。

  1. 在开始菜单à运行中输入cmd,然后把目录转换到Apache的bin目录下;
  2. 通过输入如下命令来创建一个项目资源文件TestProject

svnadmin create D:\svnserver \TestProject

如下图所示:

创建的项目文件如下图示:

这个时候我们的项目文件已经创建好了,我们可以通过下面的Http网址进行访问了http://localhost:8000/svn/testproject,这个时候没有对此访问加任何访问权限控制。下面我们就来说一下如何创建用户。

  1. 用户创建
    1. 在开始菜单à运行中输入cmd,然后把目录转换到Apache的bin目录下;
    2. 通过输入如下图的命令来创建一个用户:

 这个时候,你在D:\SvnServer目录下面就会看到一个svn_auth_passwd,这个说明用户文件已经创建,这里要加以说的是,-c用于第一次创建文件使用,如果以后要加用户就不能再使用-c了,要使用-m。

接下来你用http://localhost:8000/svn/testproject 去访问的时候,他就会叫你输入用户名和密码去验证了。

三.客户端的使用

上面我们已经配置好了Subversion的目录,即Server,那么我们对于每一个开发的程序员来说,如何Get Source Code呢?下面我们就来谈谈这个问题?

我们现在可以安装一个TortoiseSVN,可以到官方网站(http://tortoisesvn.tigris.org/)上面下载,这是一个非常好用的Subversion客户端软件,安装步骤非常简单,这里不在说明了。在安装好这个软件后,我们点击鼠标右键,你会发现多了几个菜单,如下所示:

 

客户端使用的时候,我们除了上面所说网页看的那种方式,我们可以点击SVN CheckOut从SVN Server从指定的目录去下载要使用的项目,会弹出一个配置框,在下载地址中输入http://localhost:8000/svn/testproject,点击OK,就会出现如下图的验证方式,输入在上面创建的用户名和密码,你就可以从SVN上面下载testproject的内容到本地了。

下面再和大家共享一下TortoiseSVN的一些简单用法:

  1. 增加文件

假设我们上面在一个叫GetTestProjectSource的文件夹上点击了SVN CheckOut,那么我们现在就在GetTestProjectSource里新建一个文件叫test.txt的文件,然后又击这个文件到这个文件上,在TortoiseSVN中点击Add,点击OK,加完后,你会发现文件的图标发生的改变,就说明我们已经把文件加到SVN Server上了,这只是加上,还没有提交,你需要再点右击这个文件,你会发现多了一个SVN Commit项目,点击这个,把这个文件commit上去,这里你的文件才是正确到Server上了,同时文件图标也发生了改变。

这个时候如果有人同样的在来获得这个http://localhost:8000/svn/testproject 路径上的内容的时间就会看到这个文件被下载了。

  1. 修改文件

 可能我们会在本地进行修改,就是我们一开始说的,昨天我把修改完的代码Commit上去了,那么今天我可能对这些代码做了修改, 修改完后我们应该怎么做呢?

我们现在就打开test.txt文件并在其中输入test,然后点击保存,这时你会发现图标会变给,就说明这个文件已经在你的本地修改过,与SvnServer服务器上的版本已经不统一了,现在你服务器上的是昨天的代码,你这个是你刚修改的代码。我们需要所这两个代码进行同步。

点击这个文件右键,再次选择 SvnCommit,代码就上去了。这个时候说明现在服务器上的代码都是最新的了。

上面我们把文件加上去后,或者更新了,那么假设现在有两个用户在进行开发,另外一个用户怎么知道我做了哪些修改呢,又如何获得这些代码呢?我们可以通过右键点击这个文件夹,然后选择Update来更新当前的文件夹,就是他就可以获得我所修改的代码了,具体的我就里就不说你了,自己做一下测试吧。

  1. 查看修改过的版本及比较版本

我们刚才对test.txt文件做了修改,并且更新到了SVN Server上,那么现在我们对这个文件再次做修改,在原来内容的test后面加上 by Xiong Wei,然后保存,这时我们先不要进行SVN Commit,我们点击,选择如下图所示的Diff。

我们将会看到本次修改与上次的修改有什么不同了,如下图所示:

现在我们将这个文件Commit上去。

比较说我们想知道这个文件被更新过多少次,每次之间代码的修改有什么区别,应该怎么办呢?

不用急,TortoiseSVN也为我们提供了这样的功能。我们可以左击这个文件,选择TortoiseSVN下的Show log,这个时候我们就可以看到整个被修改过的记录了,如下图所示。

我们可以从中任意选择两个条想要比较的记录(按Ctrl键选中),然后点击左键,选择Compare revisions。

我们还可以将我们本地的代码恢复到一个较早的版本,只要选择上面记录点的一条后,右击此记录,选择Revert to this revision,就是可将你本地的代码恢复到较早的版本了。

需要注意的是假设UserA和UserB都获得了现在的版本Revision显示为3,当UserA再次修改后Commit,那么Revision就是4了,那就UserB就不能再更新了,会被提示一个更新错误信息,只有把当前的版本更新到4后,在4上做操作才能被允许Commit。


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织