`
totoxian
  • 浏览: 1074353 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

版本控制软件SubVersion 入门

阅读更多
版本控制软件SubVersion 入门
前言:最近一直在不同机型上面移植项目,或者在以前的功能基础上添加新的功能,因为这家公司以前幼稚到未用版本控制工具来进行源代码的控制,现在又是几个人编辑同一份源代码,其效率之低可想而知。真是"你方改完我上场"啊。
先引用句名语吧:
"即使你的团队只有你一个人,你的项目只需一周的时间;即使那是'用过就扔'的原型;即使你的工作并非源码;确保每样东西都处在源码控制之下--文档、电话号码表、给供应商的备忘录、makefile、构建与发布流程、烧制CD shell 脚本--每样东西。"(《程序员修练之道》)

对于每一个程序员来讲,怎样能够最好的保护你的源代码都是最重要的一件事。一个源码控制软件就相当于一个系统级的Undo 键,当你的程序可用时,作一个标记,当程序被改的体无完肤不能运行了,你可以方便的回到上一个可用的版本,或者当你发现自己想找回上周被你删除的一个函数的时候,你可以很容易的做到这一点。

当然,好的版本控制并不止于此。对于团队开发来讲,你可以控制每个人的分工和权限。两个人可以同时编辑同一份源代码,由程序来提醒两次修改中存在的冲突。你可以查看某一处改动是谁做的。当你发布了一个正式版,可以建立一个分支,在分支上继续开发下一个版本,而对于后来发现的Bug,可以在主分支上继续改进,如果分支上同样存在这个Bug,可以将两者合并。只要修复一次就可以,这不是很诱人吗?

目前业界流行的版本控制系统有很多,商业软件比如ClearCase,配置复杂,功能强大,价格也同样对得起它的功能。而Visual Studio 自带的SourceSafe 与它的开发工具完美整合,使用方便,但是对于其它语言和工具的支持就差一些了。开源世界最著名的版本控制软件是CVS,相当一部分的开源软件都在使用这个软件,以供全球的程序员协作开发。然而,CVS 有一些与生俱来的缺点,在设计之初没有考虑到,而随着使用量和使用状况的大增,慢慢显露了出来,比如,最重要的一点,它不支持文件改名,还有,只对文件控制版本,没有目录的管理,等等。

后来,CVS 的主要作者(Fogel 等等)在他们现任公司的资助下开发了SubVersion,用以替代CVSSubVersion 的设计目的就是针对CVS 的一些弱点进行改进。目前已经有几个知名的开源项目从CVS 转向了SubVersion 来保存源代码。SubVersion 目前发布了1.1 正式版,已经相当稳定可靠了。本文只是对SubVersion 安装和使用入门的一点引导,以便从未用过版本控制的程序员可以快速上手,先从保护你的个人代码开始。

安装:
SubVersion
对于目前流行的大部分平台都有支持,可以到subversion.tigris.org 下载各个平台的安装包,或者下载源代码在linux 等平台上自己编译。对于windows 平台,它也提供了安装程序。

一点说明:SubVersion 的运行分为两种情况,一种是作为独立的服务器,默认使用3690 端口,像CVS 那样来运行,支持直接连接或者SSL 连接。另一种是借助Apache2 webdav 功能,直接挂接在apache 上,作为它的一个模块来运行。

这两种配置方式是各有优缺点的。首先,当svn 独立运行的时候,作为一个轻型的服务器,反应速度和连接速度都要比apache 要快一些。它有自己的用户认证方式,(使用系统中现有的帐号),它比apache 更容易配置和使用。当用户以自己的身份登录以后所做的任何操作将被记录下用户名。以apache 的模块来运行的时候,整个系统是以apache 所在的身份来运行的,所有的用户(包括任何验证过的用户)都是使用这个身份的,那么你就没有办法区别不同用户的操作了。(有一个办法,就是让用户自己把名字写到每次checkin message 里面)。它的优点是可以使用apache 现有的架构,不需要去改动你的防火墙,而且,可以使用IE 提供最简单的查看最新版本的功能。Apache 有很多的认证方式,还有非常细致的对目录的权限管理,而且apache 是一个安全、稳定的服务器。

具体使用哪一种服务器取决于你的需求,也可以几种方式一起用,svn 并不在乎这个。但是,为了容易管理和配置,建议你还是选择其中一种。(大部分人会选择apache 的方式,因此本文只详细说明这种方式的安装和使用,对于svn 独立运行的情况作为附属的章节供大家参考。)

Windows
上的安装:安装过程很简单,双击下载回来的svn-1.1.0-setup.exe,一路回车就可以安装好了,连必须的两个环境变量都帮你配置好了。在安装目录的httpd 目录下有两个so 文件,复制到apache modules 目录中,bin 目录的dll 文件复制到apache bin 目录下或者系统的system32 目录下,(取决于你的apache 的运行状况),在apache httpd.conf 里面找到两行:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so

确保它们没有被注释掉。然后在这两行的下面添加两行:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

重启以后svn 就以apache 模块的方式来运行了。如果出现apache 启动不起来的问题,看看svn 命令是否在你的环境变量PATH 里。Linux 上的编译安装:对于下载回来的.tar.gz 文件,用tar zxvf 命令解压,进入解压出来的目录,./configure-with-apxs=/path/to/apache/bin/apxs,然后make && make install,安装完成时会自动修改你的httpd.conf 文件,添加前面那两行,不需要你再做任何操作。

配置:
安装已经完成了,接下来要让它可用还需要两步操作。

首先要确定你保存某个工程的位置。比如你要把所有的工程放在D:\repos 目录下,现在要建立一个工程project1,在命令行输入:Svnadmin create d:\repos\project1

该命令会创建这个目录,并建立所必须的一些数据库和配置文件。然后到httpd.conf 文件里添加对该目录的映射。Svn 有两种映射方式,一种是针对每个项目,确定一个虚拟目录(Location),另一种可以对一个总目录确定一个虚拟目录,其下的所有工程只要在该目录下直接输入工程名即可。第二种当然是要方便的多了。不过我们还是介绍一下第一种吧。在httpd.conf 的任意位置(如果你需要在某个虚拟主机里面实现,就添加到那个虚拟主机的配置段)添加以下内容:(注意apache 的配置文件里不能使用\,要用/来代替)

<Location /svn/project1>
DAV svn
SVNPath D:/repos/project1
</Location>

重启apache 以后,在浏览器里输入Http://localhost/svn/project1,应该就可以看到该工程的内容了,新建的工程会显示Revision 0:/。使用这种方式,必须对你的每个工程都添加这样一段配置,而svn 提供了另一个选项。

<Location /svn>
DAV svn
SVNParentPath D:/repos
</Location>

这样,该目录下所有的工程文件就都可以访问了。你同样可以输入上面的地址来验证一下。

如果要限制别人对仓库的访问,直接在该Location 段加入任何合法的apache 的权限控制命令就可以,比如:

AuthType Basic
AuthName "Subversion repository"
AuthUserFile /path/to/users/file

如果想让验证通过的用户有写权限,匿名用户有只读权限,可以在下面再加两行:

<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>

具体的配置方式有很多,请参考apache 的说明文档。

OK
,安装配置已经完成,下面可以开始使用了。

使用:
比如你现在要把一个现有的工程Project1 要放入svn 的控制之中,并且使用前面建立的那个数据仓库。打开命令行,进入你的这个工程目录,执行:Svn import . http://localhost/svn/Project1 -m "This is my project"

注意import 后面是个点表示当前目录。如果不用点也可以,默认就是使用当前目录。

然后你会看到该目录下所有的目录和文件都被添加了。用浏览器打开上面这个地址,应该可以看到该目录下所有的文件和目录了。(切记,svn apache 的身份来运行,这个用户名需要有对该目录写入的权限。在windows 上这通常不是问题,但是在linux 上,你最好能够考虑清楚一些)。

这个文件列表是由svn 模块生成的,如果你觉得太简陋,可以写一个自己的xslt 转换文件,添加到配置段。具体信息参照svn 的帮助文档吧。

现在只是你的工程文件被导入了,你的现有文件并没有在svn 控制之下。你可以删除你原来的工程目录了,(安全起见,还是给它改个名字比较好)。到上层目录下执行:Svn checkout http://localhost/svn/Project1

该命令会自动在当前目录下建立Project1 目录,并下载回仓库中所有的文件。该命令还有很多参数,比如指定要建立的目录的名字,或者指定要导出的版本号等等。

现在该工程中每个目录下都有了一个.svn 的隐藏目录,以后某个文件被改动了以后,用svn status 可以查看,svn checkin 可以将所做的更改放入仓库中。具体可用的命令还是去看subversion 的使用手册吧,(安装以后的那个帮助文件),这份文档还是详细读一下比较好。还好,有中文版,只不过是繁体的:http://svn.ntcu.net/svnbook/book.html

如果所有的命令都要这样输入,是不是太慢了?可以使用可视化的管理工具TortoiseSVN 在这里下载:http://tortoisesvn.tigris.org/。该工具与操作系统整合,给各种类型的文件标上不同的图标,并且可以以可视化的方式显示所有的变更记录,使用起来非常直观,也非常方便,而且提供了多国语言包,包括简体中文,我们就不多说了,一看就明白。另外,对于使用eclipse 的用户,还有一个插件可用,http://subclipse.tigris.org,这两者结合使用,功能相当强大。

以独立服务器的方式安装:
如果你只是在自己的机器上装上一份来对自己的日常工作提供版本控制功能,或者你没有apache2,也不想安装这个东西,那么,把svn 安装独立的server 也是一个不错的选择。

实际上,在windows 上安装完成以后不需要做任何操作你就可以开始使用了。按照前面说的方法新建一个测试用的库:Svnadmin create d:\repos\test1

然后随便找个目录导入一下试试看:
Svn -import . file:///d:/repos/test1 -m "just a test"

是不是成功了?这样的命令方式只能在本机上使用。要启用svn 伺服器,只要在命令行上运行svnserve -d 就可以了。很简单,不是吗?再试一下(打开另一个命令行窗口,这个一定不能关闭啊):

Svn -import . svn://localhost/d:/repos/test1 -m "just a test"

这个网址看上去有些奇怪,到你的运行server 的命令行窗口中,用ctrl+C 终止它的运行,再使用svnserve -d -r d:\repos来运行它,这样server 就知道你的版本库的默认目录是什么了。然后再导入和使用的时候,地址只要写svn://localhost/test1就可以了。

linux 上也是一样的,配置的时候可以不用-with-apxs 了,直接configure,然后make && make install 就可以了。运行server 的命令也是一样的。

如果要把svn 作为一个后台服务来运行怎么办呢?总不至于一直让它开着一个窗口吧?万一不小心关了……linux 下要把它作为后台服务很简单,其实只要在命令的后面加上&就可以了,也就是通用的形式:svnserve -d &,这样它就会在后台一直运行下去。或者你也可以让它使用xinetd 的方式来运行。但是在windows 上,就比较麻烦一些了,因为作者没有考虑到(或者说没有考虑)使用者的这个要求,因此,它不能像apache 那样容易的把自己安装成服务,不过既然使用者都是程序员……http://dark.clansoft.dk/~mbn/svnservice/下载一个专为这个任务而写的小程序就可以了,使用方法在这个网页上有详细的说明。

在这种方式下如果要进行用户控制,可以使用ssl 协议的方法,那么,地址就变成svn+ssl://localhost/test1 了,但是这种方式要求windows 上有可用的ssl 客户端。也可以用密码文件的方法,打开你的d:\repos\test1\conf 目录下的svnserve.conf,将
anon-access = read
auth-access = write
password-db = passwd
注释去掉,passwd CVS 一样是使用apache htpasswd 程序来生成,放在该conf 目录下即可。另外提一句,apache 验证如果使用basic 方式的话,你在浏览器端输入的用户名和密码是以明文在网络上传输的,这并不是很安全。而svn 的客户端在使用这种密码文件方式验证的时候,在网络上传输的只是md5 值,比apache 还要安全一些。
分享到:
评论

相关推荐

    版本控制软件subversion及TortoiseSVN快速入门培训教程

    版本控制软件subversion及TortoiseSVN快速入门培训教程(兼有协同工作功效)(3.1M 解压缩后用wps2005或powerpoint都可以打开) &lt;br&gt;http://www.cuteser.com/train/softTrain.htm

    版本控制:Subversion使用指南

    **版本控制:Subversion使用指南** Subversion,简称SVN,是一种开源的版本控制系统,用于管理文件和目录的变更历史,使得多人协作开发时能够高效地处理代码版本问题。Subversion提供了一种集中式的版本控制模型,...

    比较好的版本控制入门:SubVersion

    **版本控制系统SubVersion(SVN)详解** SubVersion(简称SVN)是一种广泛使用的开源版本控制系统,它允许用户管理文件和目录的历史版本,方便团队协作和项目管理。SubVersion的核心功能包括版本追踪、冲突解决、...

    Subversion快速入门教程

    - 启动版本控制器服务器: - 使用命令`svnserve -d -r d:\svn_root`。 - 注意:不要关闭运行此命令的命令行窗口,否则服务器将停止运行。 #### 六、初始化导入 - 来到包含要导入项目的根目录(例如:`d:\svn_...

    Subversion svn快速入门教程.doc

    Subversion(通常缩写为svn)是一个开源的版本控制系统,用于跟踪文件和目录的更改,以便在团队中协作开发项目。这篇《Subversion svn 快速入门教程》旨在引导初学者快速搭建Subversion服务器并开始使用它。相较于...

    Subversion快速入门教程(转)

    **Subversion快速入门教程** Subversion(简称SVN)是一种版本控制系统,用于...通过熟练掌握这些基本操作,你可以更好地融入软件开发的版本控制流程,提高工作效率。记住,持续学习和实践是掌握Subversion的关键。

    svn入门教程(subversion与版本控制)

    【版本控制】是软件开发中不可或缺的一环,它允许开发者追踪和管理代码的变化,以便于协同工作、回溯错误及优化代码。Subversion(简称svn)是流行的一种版本控制系统,旨在改进 Concurrent Versions System (CVS) ...

    Version Control with Subversion For Subversion 1.3

    - **Subversion(SVN)**是一款开源的版本控制系统,广泛应用于软件开发领域。它通过一个中心服务器存储版本库(repository),支持多个用户同时进行文件和目录的版本管理。 - **主要特点**: - 支持跨平台运行,可...

    subversion培训资料

    Subversion在IT行业中被许多企业和开源项目视为首选的版本控制工具,其功能强大且易于使用,使得它在软件开发中的地位不可忽视。 "svn-book.pdf"很可能是一本详细的Subversion官方指南,涵盖了Subversion的各个方面...

    SVN(Subversion)简易入门教程

    SVN,全称Subversion,是一款开源的版本控制系统,用于管理和跟踪项目源代码的变化。它允许多个开发者在同一个项目上协同工作,同时记录每一次修改,确保团队间的代码同步和冲突解决。SVN在软件开发领域广泛应用,...

    文档版本管理软件svn入门资料

    Subversion(简称SVN)是一种广泛使用的开源版本控制系统,尤其在Java软件开发中,它是首选的工具之一。本入门资料主要涵盖了SVN的基础知识,特别是如何通过命令行进行操作,包含三个txt文件,分别是a.txt、b.txt、c...

    subversion服务器搭建和svn客户端软件

    总结起来,Subversion服务器搭建涉及到安装、配置和管理仓库,客户端软件如TortoiseSVN则提供了直观的用户界面来执行版本控制任务。通过提供的教程和资源,开发者可以快速掌握Subversion的基本操作,提升团队协作...

    版本控制学习

    本文将深入探讨版本控制的概念、发展历程、核心功能及其在软件工程中的应用,旨在为初学者提供一份全面的入门指南。 ### 版本控制的核心价值 版本控制系统的引入,解决了软件开发中的一系列痛点,包括但不限于代码...

    Pragmatic version control with subversion

    《实用版本控制与Subversion》是一本针对Subversion的详细介绍书籍,它不仅涵盖了Subversion的基本概念和使用方法,还深入探讨了如何利用Subversion提高软件开发的效率和质量。无论是初学者还是有经验的开发人员,都...

    版本控制方案(SVN)

    在这里,我们将介绍基于 SVN(Subversion)的版本控制方案,SVN 是当前最流行的开源版本控制软件。 一、版本控制的基本概念 版本控制是指对软件开发过程中的源代码、文档、配置文件等进行跟踪和管理,以确保项目的...

    深入浅出系列_SubVersion和WinCVS

    SubVersion和WinCVS是两种在软件开发领域中广泛使用的版本控制系统。SubVersion(简称SVN)是一个开源的版本控制系统,用于跟踪文件和目录的修改,使得多人协作开发成为可能。WinCVS则是Windows环境下对CVS...

Global site tag (gtag.js) - Google Analytics