Subversion名片:
Subversion是一个自由,开源的版本控制系统。在Subversion管理下,文件和目录可以超越时空。Subversion将文件存放在中心版本库里。这个版本库很像一个普通的文件服务器,不同的是,它可以记录每一次文件和目录的修改情况。这样就可以籍此将数据回复到以前的版本,并可以查看数据的更改细节。正因为如此,许多人将版本控制系统当作一种神奇的“时间机器”。
Subversion 与 CVS:
在SVN(Subversion)之前,CVS是使用最广泛的版本管理软件。CVS——Concurrent Version System:协同版本控制系统,服务器上保存所有的开发项目,开发者们通过服务器上的共享目录,共同开发同一个项目,达到追踪所有的工作进度,而服务器上也会保存历史版本信息,以方便开发者的出错。
Subversion是CVS的接班人,将渐渐取代CVS。
SVN与CVS对比的优势:
统一的版本号。
n CVS是对每个文件顺序编排版本号,在某一时间各文件的版本号各不相同。而Subversion下,任何一次提交都会对所有文件增加到同一个新版本号即使是提交并不涉及的文件。所以,各文件在某任意时间的版本号是相同的。版本号相同的文件构成软件的一个版本。
原子提交。
一次提交不管是单个还是多个文件,都是作为一个整体提交的。在这当中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏。
重命名、复制、删除文件等动作都保存在版本历史记录当中。
对于二进制文件,使用了节省空间的保存方法。
目录也有版本历史。
整个目录树可以被移动或者复制,操作很简单,而且能够保留全部版本记录。
分支的开销非常小。
优化过的数据访问,使得一些操作不必访问数据库就可以做到。
这样减少了很多不必要的和数据库主机之间的网络流量。
获得SVN:
Subversion项目由CollabNet启动,在2009年11月Subversion加入了Apache软件基金会,成为ASF管理的超过130个开源项目之一。Subversion项目进入Apache孵化器仅数月的时间(大约2010年02月)已经得到Apache基金会管理委员会的批准,升级成为Apache正式顶级项目。SVN将为全世界的程序员提供更好的服务。
虽然CollabNet启动了这个项目,并且一直提供了大量的工作支持(它为一些全职的Subversion开发者提供薪水),但Subversion像其它许多开源项目一样,被松散的、透明的规则管理着,这样的规则激励着知识界的精英们。CollabNet的版权许可证完全符合Debian的自由软件方针。也就是说,任何人都可以根据自己的意愿自由的下载、修改和重新发布Subversion,不需要CollabNet或其他人的授权。
现在之前的SVN下载站http://subversion.tigris.org/ (Trgris-CollabNet)所有的源码及文档以正式提交到了http://subversion.apache.org/ 。目前最新的稳定版本为1.6。
现在我们可以用以下途径获得SVN:
访问Apache SVN 。在左侧找到Getting Subversion。点击Binary Packages。
在Binary Packages中找到SVN在Windows上的发行版。
我们看到在SVN在Windows上又有很多发行版,这里我们选择由CollabNet发行的SVN。
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580447w454.gif)
然后
下载就OK(6.71 MB)
安装SVN:
然后一路 Next就搞定了。
获得TortoiseSVN:
TortoiseSVN是一个非常便捷的SVN客户端,TortoiseSVN很好与Windows资源管理器结合在一起,从而很方便得管理SVN版本库。
这里要提一下Subversion的客户端,一类是websvn,基于web的SVN管理软件,一类是一个TortoiseSVN为代表的桌面客户端软件。SVN代表的是代码版本的标准,并没有严格的区分其到底是客户端还是服务器,有些只提供客户端功能,有些之提供服务器功能,还有的两种都提供。
纯SVN是基于命令行的,SVN多是安装在Linux下,TortoiseSVN为SVN加了一个Windows资源管理器外壳并提供了相应的功能,这样TortoiseSVN更加便捷。
我们可以在http://tortoisesvn.net/downloads.html# 下载TortoiseSVN。
安装TortoiseSVN:
一路Next就OK。安装完成后其实不必重启就可以使用。
创建版本库:
使用 svnadmin –create 命令创建版本库
安装SVN成功后,SVN会自动把安装目录下的bin路径添加到系统PATH中。此时就可以在Windows的cmd下使用svn命令了。
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580454uZ8n.gif)
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580457gr4o.gif)
现在我们要在D:\ 下面创建我们的版本仓库,这个时候我们需要使用svnadmin命令,svnadmin的子命令也有很多,这里我们既然是要创建就少不了create。
这个时候我们就在D:\ 下创建了一个名为 svnrepo的版本仓库,同时我们可以在D:\ 下看到有个名为svnrepo的文件夹。
下面我们来看看这个目录里究竟有什么:
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580459eta9.gif)
要说一点,要想保证你的版本仓库很安全很稳定的使用,第一不要乱动这个目录下的任何一个文件,第二给版本仓库设置权限。
OK,真正的版本控制文件在db文件夹下,conf下有版本仓库的相关配置,包括权限,密码等配置。
现在这版本仓库里没有任何东西,不着急向仓库添加东西,先来回顾下创建仓库的命令: svnadmin create 仓库名
使用TortoiseSVN创建版本仓库:
现在我们要开始使用TortoiseSVN了,或许你迫不及待地打开过TortoiseSVN开过:
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580460aq2a.gif)
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580461pr3i.gif)
安装不正确吗?don’t worry。上面是说TortoiseSVN是一个扩展外壳,意思就是TortoiseSVN是一个集成在Windows资源管理器上的。要想使用TortoiseSVN您仅需要在任一目录下右单击,然后就会出现TortoiseSVN的命令菜单。
OK,我们来看看怎样使用TortoiseSVN来创建版本仓库,这次我们在D:\tsvnrepo下建立版本仓库。
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580462NrUq.gif)
随后我们可以看到:
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580463YsOs.gif)
表示创建成功。打开tsvnrepo来看看,目录结构和之前看到的一模一样。
看来用TortoiseSVN给我们省了不少工夫。
签出版本库:
OK,在上面我们已经创建了我们自己的版本仓库,而且接触并使用了TortoiseSVN这个小工具,现在我们要做到事前就是从我们的版本库中签出我们想要的版本。
首先我们应该知道版本库的位置,在这里我们使用之前创建的tsvnrepo做为我们的版本库。然后我们还要把我们的版本库放在SVN服务器上,这样我们签出时实际上就是在访问SVN服务器,这里我们使用SVN自带的服务器svnserve,通常会选择Apache Server。
我们可以通过svnserve –i 或者使用svserve –d来启动svnserve。服务器启动后,客户端即可以通过绝对路径访问。如上例可以访问 svn://
服务器IP/etc/svn/repos
。同时可以指定一些选项,常用的如 -r
,用来指定版本库的根路径,例如假设版本库位于 /etc/svn/repos,我们就可以使用:svnserve –d –r /etc/svn 来启动一个根目录在svn下的版本库服务器。则客户端可以通过如下 URL 访问服务器:svn://
服务器IP/repos。
这样可以有效的避免暴露本地路径。
【如果在 Windows 操作系统下,可以将版本库设定在 C 分区,如 c:\svnroot\repos
可以通过 svn://
服务器IP/svnroot/repos访问
,如果在其他分区,就必须要通过 -r
选项来指定 root 位置。】
在这里我无法演示在局域网中的情况,只能在本地显示了。首先启动svnserve:
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580463Uxe3.gif)
另外提醒一点:这个窗口不能关闭,关闭后svn服务器就shutdown掉了,这个你懂的。
现在假设我的工作区在D:\myworkspace 下,我想把版本库签出到这里,在签出时我们使用TortoiseSVN,在D:\myworkspace下右单击,然后:
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580464wpPq.gif)
![image image](http://hi.csdn.net/attachment/201106/20/0_13085804659fo4.gif)
单击OK,就从版本仓库中把所有的都签出了。当然我们之前的版本仓库中什么都没有,那么在D:\myworkspace下就看不到任何东西,或许你会发现,这个文件夹中多了一个隐藏对象,总是躲不过火眼金睛的我们啊。多了一个.svn的隐藏文件,不要乱动它,你懂的。
此时在D:\myworkspace下右单击,TortoiseSVN会给出不同的命令菜单里,这说明,现在的这个myworkspace已经不是之前的那么简单了。
签入到版本库
首先我们在D:\myworkspace下建立一个mydoc文件夹,然后在里面用java语言来写一个Helloworld程序。
现在我们要把mydoc签入到我们的版本库中,对mydoc右单击:
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580466H85r.gif)
OK。这样就把mydoc里的所有内容添加到了我们本地的版本库中,注意此时并没有正式提交到版本库。
在此我们可以利用TortoiseSVN浏览一下我们的版本库来证明下:
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580468z9Ir.gif)
填入版本库的URL,这里我使用的是本地。
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580469895L.gif)
对,就是什么都没有。
接下来我们对mydoc右单击:
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580471kZ54.gif)
在Message:中填入提交信息是个好习惯。
或许你这次并不是那么走运,你收获了异常:
![image image](http://hi.csdn.net/attachment/201106/20/0_13085804776PFE.gif)
OK? Don’t worry.这和SVN的配置管理有关,SVN认为这样并不安全,因为SVN并不知道这次操作是谁提交的,防止后面有人赖帐。
我们要先来配置版本库信息,还记得我们的版本库tsvnrepo吗?对,它下面有个conf。
OK,我们打开来看下:
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580479R4du.gif)
就是这三个家伙导的鬼。我们先打开svnserve.conf来看看,来关注下第20行(此时你最好有属于你自己的文本编辑器):
OK,前面的 # 表示此行不起任何作用,可以理解为注释。现在把 # 去掉(注意password前不能有空格符)。然后我们在修改password文件。
在pasword文件中我们在下面添加一行,规则要和该文件中给定一致。像这样:
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580484sjy7.gif)
那么我么现在就有了lele这个用户,密码为lele。这样安全吗?No,No,No,后面我们会把它放到安全的mysql数据库中。
现在我们再倒回去提交一下,这次会要求我们提供用户名和密码。
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580485gqMO.gif)
输入我们定制的用户名和密码就可以提交成功了。
![image image](http://hi.csdn.net/attachment/201106/20/0_13085804968Jcp.gif)
OK,提交成功了,我们可以再次浏览一下我们的版本库:
![image image](http://hi.csdn.net/attachment/201106/20/0_1308580500Nhit.gif)
Good,这样就对了。
注意在新版本库中你可能未指定用户或密码,这时SVN会默认使用本地计算机的用户的账号和密码做默认。
好了本章节就到这里来,接下来章节我们来看在Eclipse怎样中使用SVN。