Chinaunix首页 | 论坛 | 博客
  • 博客访问: 934223
  • 博文数量: 104
  • 博客积分: 1919
  • 博客等级: 上尉
  • 技术积分: 1910
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-21 16:33
文章分类
文章存档

2016年(4)

2015年(1)

2014年(6)

2013年(16)

2012年(27)

2011年(49)

2010年(1)

分类: LINUX

2011-05-11 17:41:23

导言

对于大多数开发者而言,在开发过程中只需要用到subversion的客户端(命令svn),因此本文只介绍客户端的基本使用,假设的前提是你所在的项目组负责人已经在服务器上创建了版本库。关于服务器端的版本库配置和规划将另外说明。有些入门者不太容易分清服务器端和客户端,经常看到为了CheckOut一份源码在那里折腾APACHE...

关于Subversion。我们知道版本管理的工具有很多,在开源界常用的,也是最著名的,大概有CVS、Subversion(svn)、GIT和Mercury(hg)这么几款。这几款又分为两类,一类是集中式的版本管理CVS和SVN,另外一类称为分布式版本管理,如GIT和HG。关于集中式和分布式的区别,可以google到很多文章,在使用上最大的区别是分布式版本管理可以进行“本地提交”,相当于版本库在本地,同时各版本库之间又可以进行同步;而集中式的版本管理在本地只有一个“工作拷贝”,只有版本库一系列版本中的一个(一般是最新的一个),所有的版本交互必须和服务器端通信。相比较而言,分布式的版本库更适用于类似Linux内核等开源项目,而集中式和版本库更适用于公司或团队的项目开发。在集中式的版本管理软件中,Subversion是其中的佼佼者,甚至有可能是用得最广泛的版本管理软件,对于初学者而言也更容易掌握,可以更快的建立版本管理的概念。掌握了Subversion的使用后,再使用其它的版本管理软件,包括类似于GIT的分布式版本管理软件,就比较容易了。Subversion有一本经典的参考书,也是[],这份文档不仅详细阐述了Subversion的使用,对版本管理的基本概念也作了详尽的说明,是入门者的必读材料。

关于Subversion的版本,目前最新的是1.6.x,常用的有1.4.x等版本。在一般应用中差别不大,不必过于介意。一般来说Fedora、Centos自带的是1.4.x的版本,而ubuntu自带的是1.6.x的版本。

[] Subversion的安装 [] 在ubuntu上

打开终端,在网络连接正常、源配置没有问题的条件下。输入命令:

sudo apt-get install subversion

就可以方便地安装,安装完成后,在终端输入svn,如果有svn的提示,则表示成功安装。

[] 在Fedora上

在安装系统的时候,可以通过定制软件包的方式进行安装,如果安装系统时没有预装,也可以使用命令

sudo yum install subversion

进行安装

[] 在Windows系统上

在Windows系统上可以使用[],有一个不错的图形界面。只是效率比起命令行会略显繁琐一些,好在入门比较容易。


[] Subversion的使用

本文以Linux下命令行操作为例来介绍SVN的使用,Windows下的使用与Linux下除操作稍有不同外,方法、步骤大致相同。

我们目前的服务器设置如下:

Subversion server.gif

可以看到,版本库的访问地址为 ,根节点(可以简单的理解为根文件夹,虽然他们在存储上和数据组织上有非常大的差异)有三个文件夹trunk、branches和tags,其中:

  • trunk:主干,里面包括项目开发所有的源码和其它文件,所有的有效修改最终都要合并到trunk中。一般由项目管理员维护,其余开发者一般拥有读权限。
  • branches:分支,在我们项目中,为每一个开发者建立了对应的分支,一般情况下开发者在自己的分支上工作(检出代码、在本地修改,然后提交到服务器),当工作进行到一定程度后,可以向项目管理员申请将工作合并到主干,由管理员验收工作并进行合并操作。
  • tags:一般存放一些重要的版本,如项目的里程碑。
[] 检出代码

首先切换到主文件夹:

cd ~

然后建立一个普通的文件夹mybranch,以后我们的所有工作都在这个文件夹进行:

mkdir mybranch cd mybranch

检出自己的分支

svn checkout . --username=shixianqiang

这里注意以下几点:

  1. 注意分支名称一定是你的分支
  2. 注意用户名一定是你的用户名
  3. 注意中间的“.”,而且两边各有一个空格

执行以上命令后,系统会自动连接版本服务器,并提示你输出密码,正确输入密码后,系统开始从服务器检出代码,在上面的命令中没有指定版本,所以会检出最新的代码。如果代码量比较大,检出可能需要花费一些时间。如果你想检出特定代码,也可以把路径写长一些,比如linux-2.6.16.13/。

[] 修改代码

检出代码后,就可以对源码进行修改、编译、调试了。这里需要注意的是,平时使用起来很平常的创建文件、创建目录、删除文件、目录在引入版本管理后都会有一点不同。在开发过程中如果不注意这些差异,可能会造成比较大的麻烦。

[] 创建文件或目录

Subversion除了可以监测文件的变化外,也可以监测目录的变化。

对于创建一个新的文件或目录来说,可以使用平时使用的一般方法来创建,如创建一个目录使用mkdir命令:mkdir mydir。需要注意的是创建完成后,应该使用svn add mydir,将该该目录纳入版本管理,否则Subversion认为这个目录是一个未知的东西,不会对该目录做任何处理。

创建一个新的文件也类似,一般而言,我们使用vim myfile.c,或者使用copy的方法从另外一个地方拷贝一些文件到自己的work-copy,对于这些新引入的文件,也要使用svn add myfile.c的方法将文件 纳入版本管理。如果是引入了一个或若干个目录,逐个使用svn add 的方法比较繁琐,这时可以使用通配符“*”,如svn add *,则将当前目录下的所有文件和目录一次性纳入版本管理。使用通配符的时候注意,不要将你不希望纳入管理的文件添加进来,比如编译产生的.o文件。

[] 删除文件或目录

相比较而言,删除文件或目录是一件更需要谨慎的操作。

平时我们使用使用rm myfile.c删除文件,使用rm -r mydir删除目录。在版本管理体系下,所有的删除命令前都必须加上svn,比如svn rm -r mydir。否则Subversion将报错,而且处理起来比较麻烦。

使用svn rm myfile.c后,myfile.c并没有真正从你的硬盘删除,只是打上了一个删除的标志,在你下一次提交代码时才真正删除。

[] 修改文件

相对来说,修改文件是最简单的,直接对文件进行修改就可以了。Subversion会监测所有已经进入版本管理的文件,并记录下你对文件的修改。在项目中,要求使用vim编译源码。

[] 提交修改

源码修改完成,在本地验证没有问题即可提交到服务器,提交方法是在你纳入版本管理的目录下输入以下命令

svn commit -m "information"

其中information是你关于本次提交的描述,尽可能把你提交的目的、修改的文件说明清楚,比如“update gpio driver, modify ./driver/char/sep4020_char/gpio.c”。

一次提交完成后,服务器的版本加1,比如是你提交前是r05,提交后就变成了r06,而且整个版本库都提高了一个版本号。

关于什么情况下可以提交,不同的流派有不同的观点,一般不外乎以下两种:

  • 每次有意义的修改完成后都提交一个版本,这种做法有助于回溯修改,适用于对开发已经非常熟练的工程师。
  • 确认修改没有问题了再提交,这种做法适用于新手,或者还不太熟练的工程师。因为他们的修改往往不非常确定,有探索的成份,每次都提交会产生很多“不必要的版本”。
阅读(1425) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~