基于Apache+SVN+Tortoise的版本管理系统的建立,svntortoise


(n年前写的一篇) 

     花了差不多4个月的时间为公司写了一个软件,新产品的Demo程序,跟学校里面写的那种几千行的一个对话框的程序还是有很大的不同的,老大一直在提修改意见,特别是到了最后阶段,经常需要修改或者增减一些功能,改到后来就晕头转向了,好多感慨!也许下一个软件会更加注意点!这个软件的最后阶段,我开始按照老大的意思测试使用版本管理的软件,还没有给同事们培训,先在这里介绍下:

一、准备工作

    首先说明一个问题,我们为什么要使用版本管理软件?第一,软件开发是一个很无常的过程,很有可能你花了一天甚至更长的时间去开发你的系统的一个部分,但是最后发现你的方法是完全行不通的,这时候你需要退到原来的地方重新来过,通常的方法是采用无敌的‘打包-复制-粘贴’的方式,但是,麻烦而且不方便管理,对于你的硬盘也是个考验;第二、开发过程中突然出现一个bug,莫名其妙(这种情况很常见,我那天花了整整一天去找一个bug,结果发现是资源对话框错误地关联了一个菜单),你需要找出bug产生的罪魁动作,这时你就会发现无敌‘打包-复制-粘贴’能够给你的帮助太少了;第三,软件开发经常会需要并行开发,多个工程师分别负责不同模块的开发,不可能你拿着U盘满办公室跑来跑去吧!所以不管你是公司的大型开发,还是自己写小软件,使用SVN都能很大地提高你的开发效率,使得整个开发过程在你的掌握中。当然,最重要的是,按照本文下面的方法建立的SVN系统使用起来非常简单。

    使用的平台是TortoiseSVN+SVN+Apache。操作系统是WindowXP SP2.

     SVN是比较成熟的版本管理软件,有几个特点:一是增量备份,这样可以消除大家怕备份挤爆磁盘的顾虑;二是原子提交,这样就算在提交修改的时候出现死机、断网等因素,也不会引起混乱;三是二进制存储,这个特点使得它能管理任何形式的文件;四是它采用的管理方案是‘拷贝-修改-合并’的方案,但是支持传统的‘锁定-修改-解锁’方案,也就是说它能很好地支持并行开发,但是对于特殊场合也可以独占式开发;呵呵,最重要的是它是完全免费的,而且是开源的;(下载地址:http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100,我使用的是svn-win32-1.5.3)。

    SVN是像Dos那样通过Command形式进行操作的,使用起来比较麻烦,需要记下很多的命令,所以我用了TortoiseSVN,它是SVN的一个外壳客户端,就是说它将SVN的一些命令都封装起来集成到windows的右键菜单中,我们使用的时候只需要点击鼠标就可以完成CheckOut、Commit等操作;我使用的是TortoiseSVN1.5.4,(下载地址:http://tortoisesvn.net/),它也是完全免费,而且开源的;

    有名的Apache就不用我多介绍了,说明一下,如果你是单机开发,不存在与别人联合开发的问题,而且你也不需要通过网络去访问你的版本服务器,那么你完全可以不用安装Apache和SVN,一个TortoiseSVN就OK了;本人安装的是apache_2.2.10-win32-x86-openssl-0.9.8i,(下载地址:http://httpd.apache.org/download.cgi);也是免费开源的;

二、TortoiseSVN的使用

    下面先介绍TortoiseSVN的使用,正确安装了小乌龟之后,右键菜单就会出现它的菜单选项,如下图1所示,我们可以开始使用他了,首先你需要建立你的Repository,就是保存备份的文件夹,为了管理你最好建一个专为的文件夹,比如D:\SVN,然后在这个文件夹下面建立你的各个备份的文件夹,如建立D:\SVN\repos_project1作为你的工程project1的Repository。进入这个文件夹,从右键菜单中选择TortoiseSVN——》Create Repository here,系统如果提示如下图2,则说明你已经成功建立了一个备份仓库,这时候在这个目录下会自动生成4个文件夹,和两个文件,无须理解各个文件夹的意思;


    然后我们建立需要备份的工程,如新建一个VC工程project1,然后进入该工程的目录下,从右键菜单中选择TortoiseSVN——》Import…,弹出一个对话框,在URL中填入你建立的仓库的地址,如file:///D:/SVN/repos_project1,在Recent Messages下面的框框中填入你的介绍信息,如时间、保存作者、工程属性等等,作为一个好的习惯,这里最好填得详细点,如图3!然后点击OK,出来一个框,哗哗出来一排提示,最后一行:Completed AtVersion1,如图4,OK,你的工程已经成功导入SVN仓库;


这时候我们就可以开始开发了,开发过程中需要备份,只需在工作区文件夹中点右键菜单的SVN Commit…,这时会弹出Commit对话框,在第一个框中填入提交版本的详细信息,而第二个框中会列出发生了改变的所有文件文件夹,包括修改了的、删除了的、新增的,你可以选择性提交,点击OK之后,就会提示CompletedAt Version 2;

建立仓库——导入工程到仓库——导出工作备份——开发——提交修改,对于客户端,整个开发过程就是这样的。如果是并行开发,可能会经常用到Update选项,比如A和B工程师负责开发一个项目的两个部分,建立仓库后,他们两同时从这个仓库导出一个备份,几个小时后,A提交了一个版本,再几个小时后,B也去提交备份,为了使的B的备份中有A刚才提交的版本的修改,B会先Update一下,使得A刚才的修改部分更新到自己的版本中然后在提交。

当然,如果由于AB缺乏沟通,他们两个都去修改了同一个文件,这时候Update,系统就会提示出现冲突,对于冲突,SVN会在对应文件中用<<<<<<<.mine和>>>>>>>.r8这样的标记标明,需要用户自己去手动解决这些冲突。如果你希望某个文件只允许你一个人修改,你可以采用锁定的方法,在该文件上点右键,在菜单中选择TortoiseSVN——》Get Lock…,就会锁定该文件,如果别人提交修改了这个文件的版本是不会成功的;

Tortoise还有很多比较体贴的功能,比如比较两个不同版本的同一个文件的异同,非常直观。还有Revision Graph,可以显示整个仓库的版本树。

作为普通的用户,会上面的已经能开始工作了,但是如果你是公司版本管理系统的管理员,你还需要掌握网络服务器的建立。

三、利用Apache搭建SVN网络服务器

1.首先安装apache,domain没有输入ip;

2.解压svn,在apache的安装目录/modules下新建一个文件夹svn,并将SVN的bin文件夹中的所有文件拷贝到该文件夹里面;这是最保险的方法,因为我按照别人的介绍只拷贝其中几个文件,经常会出现服务器不能启动的状况,所以干脆直接将整个文件夹都拷贝过去;

3.修改apache配置文件:它存在与Apache的安装目录下/conf/httpd.conf,直接用文本打开;

将以下两句前面的#号去掉

LoadModule dav_module modules/mod_dav.so

LoadModule dav_fs_modulemodules/mod_dav_fs.so

在LoadModule段的末尾添加以下两句:(‘modules/svn’指路径)

LoadModule authz_svn_modulemodules/svn/mod_authz_svn.so

LoadModule dav_svn_modulemodules/svn/mod_dav_svn.so

并在文件末尾添加:各个字段的意义如下表

<Location /svn>

DAV svn                                                                #

SVNListParentPath on

SVNParentPath D:\SVN

#SVNIndexXSLT "/svnindex.xsl"

AuthType Basic

AuthName "Subversionrepositories"

AuthUserFile ooo

#AuthzSVNAccessFile ooo

Require valid-user

</Location>


4、最好配置用户密码信息

运行windows命令输入框,切换到apache安装目录,如‘C:\ProgramFiles\Apache Software Foundation\Apache2.2’,在命令对话框中输入,bin\htpasswd -c passwd username

(-c代表新建一个用户信息文件,passwd代表该文件名,username代表用户名,具体使用方法可以输入htppasswd help查询),这时会提示你输入你新建用户的密码,要求输入两次,ok,成功。如果需要添加新的用户,可以输入bin\htpasswdpasswd username去建立;

5、完成以上步骤,启动Apache服务器,如果双击任务栏Apache的快捷图标会出现以下的对话框,这说明配置已经成功,不成功的原因有可能是:端口号被占用,编辑config文件,将Listen 80中的80改为其他的数字,如81等,再启动服务器,修改了端口号之后访问需要输入ip:81访问;

6、打开浏览器,输入http://localhost/svn/repos_project1/会显示repos_project1的版本信息,则说明你的服务器成功建立;这时候局域网中Tortoise的checkout可以通过http://你的IpDomain/svn/ repos_project1/来访问。服务器端需要开通Guest帐户,有时候防火墙也会使得访问失败;


OK,如果人品不是太差的话,SVN服务器应该已经成功建立。

相关内容

    暂无相关文章