分类: 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系统上可以使用[],有一个不错的图形界面。只是效率比起命令行会略显繁琐一些,好在入门比较容易。
本文以Linux下命令行操作为例来介绍SVN的使用,Windows下的使用与Linux下除操作稍有不同外,方法、步骤大致相同。
我们目前的服务器设置如下:
可以看到,版本库的访问地址为 ,根节点(可以简单的理解为根文件夹,虽然他们在存储上和数据组织上有非常大的差异)有三个文件夹trunk、branches和tags,其中:
首先切换到主文件夹:
cd ~然后建立一个普通的文件夹mybranch,以后我们的所有工作都在这个文件夹进行:
mkdir mybranch cd mybranch检出自己的分支
svn checkout . --username=shixianqiang这里注意以下几点:
执行以上命令后,系统会自动连接版本服务器,并提示你输出密码,正确输入密码后,系统开始从服务器检出代码,在上面的命令中没有指定版本,所以会检出最新的代码。如果代码量比较大,检出可能需要花费一些时间。如果你想检出特定代码,也可以把路径写长一些,比如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,而且整个版本库都提高了一个版本号。
关于什么情况下可以提交,不同的流派有不同的观点,一般不外乎以下两种: