您的位置:首页 > 其它

svn

2015-09-22 12:05 211 查看

SVN概念介绍

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。


运行方式编辑

svn服务器有2种运行方式:独立服务器和借助apache运行。两种方式各有利弊,用户可以自行选择。


数据存储编辑

svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。


工作流程编辑

集中式管理的工作流程如下图:

集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说明:

开始新一天的工作:





1、从服务器下载项目组最新代码。

2、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。

3、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。

这就是经典的svn工作流程,从流程上看,有不少缺点,但也有优点。


优缺点编辑

所有的文档都显示SVN可以取代CV
4000
S,同时SVN的问题和缺点都被隐藏了。不幸的是,我们并不认为SVN是CVS的替代品,尽管很多缺陷都被修改了。更有甚者,它甚至让人重回CVS。CVS和SVN的比较类似于比较C++和Java。很明显CVS和SVN都远比SourceSafe强大的多,如同C++和Java比Basic强大的多。CVS代表了几乎代码控制系统的所有功能项,尽管有时他的实现并不很方便。SVN修正并添加了一些CVS并不拥的有功能。例如,创建标志和分支dubious,你在编辑文件时其他人不会有任何通知。SVN并不是CVS的替代品,只是个不同的系统,类似于CVS。它有些特有的功能,足以作为采用它的理由。这些功能使他更适合于开发环境,例如对PowerBuilder。下面你可以找到两者的相对优势、劣势。

1 存储类型格式

CVS是个基于RCS文件的版本控制系统。每个CVS文件都不过是普通的文件,加上一些额外信息。这些文件会简单的重复本地文件的树结构。因此,不必担心有什么数据损失,如果必要的话可以手工修改RCS文件。

SVN是基于关系数据库的(BerkleyDB)或一系列二进制文件的(FS_FS)。一方面这解决了许多问题 (例如,并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性。)。然而另一方面,数据存储由此变得不透明。

2 速度

CVS比较慢。

整体而言,由于架构实现的不同, SVN的确比CVS快很多。在网络上它只传输很少的信息并支持更多的离线模式的功能。但这也是有代价的。速度的代价就是巨大的存储(完全备份所有的工作文件)。

3 标志&分支

SVN采用标志和分支而抛弃了其他三件东西,实际上这意味着他们把这个概念替换为在档案库内部复制文件或目录以便保存日志。这样一来,无论标志创建还是分支创建都只是仓库内部的文件复制了。对分支而言:分支不过是在仓库内部的一个单独的目录而已了,不像早期还有些什么交错。对标志而言:已经不能对代码加标志了。在某种程度上说,SVN全文件编号补足了这个缺陷,SVN里整个仓库都有版本号,但不是针对单个文件。

4 元数据

CVS只允许存储文件。

SVN允许一个文件有任意多的可命名属性,功能十分完全。

5 文件类型

CVS最初是为文本文件存储而设计的。因此其他文件类型(二进制,统一码)文件的支持几乎没有,如需要的话则要有其他信息,并且客户端服务器端都要调整。

SVN会关心所有的文件类型,不需要你来手工操作。

6回滚

CVS允许任意的回滚,在任意一个已递交的版本上,尽管这要花些时间(所有的文件都要分别处理)。

SVN不允许递交后回滚。建议把版本库里好的状态版本加到末尾,覆盖掉损坏的版本。而损坏的版本无论如何也是会存在数据库里的。(SVN的滚回操作实际上是merge操作)

7事务

CVS中的“零或一”事务原则根本没有实现。如果检入几个文件的话(加到服务器上),很有可能部分文件完成了,而另几个没有。作为一个潜规则,手工纠正这些并且对余下的文件 (而不是所有文件)一一重复检入。这样这些文件将在两阶段中被检入。SVN的确支持“零或一”事务原则,这是SVN的一大优势。


SVN工具安装

首先,下载安装

svn下载地址:https://www.baidu.com/link?url=BfxdsMluMSQZpLo_4kO4Qyy_0u5f7iC1Jik1_I22_VSZvJT8Bk_zZMqeQwstLUF4c49U7sqXdr3YK2k4Tq7zvDapdOnoO6pE-H11ILT2-x_&wd=&eqid=82e876040003d589000000035600d5b3

安装过程如下:







安装完成后,若是成功,在我的电脑——高级——环境变量下的path中应该有SVN变量值,如图:



第二步,如何关联SVN至安卓开发工具eclipse,大多数情况下,在原有eclipse开发软件基础上,再安装完SVN,eclipse的import中并不能检索出SVN选项,原因是原有的adt工具包中并没有集成与SVN对接的jar包,解决方法是下载

svn插件(本人分享资源中可下载),此为下载后的插件:



找到自己的eclipse文件夹:



将插件中plugins和features文件中的jar包完全的复制到eclipse相对应的文件夹下,重启eclipse,便能检出SVN,如图:




SVN使用方法

安卓开发最常见的两种SVN使用方法,第一种,是从eclipse中直接用SVN导入项目,这时,eclipse与SVN建立关联,源文件并无关联;第二种,现在文件夹中用SVN载出项目源码,再以eclipse原生方法导入项目,此时,是源文件与SVN建立关联,与eclipse无关联。综上所述,SVN建立与源文件的通道只能有一条,具体解释如下:

第一种导入方式:由eclipse中直接用SVN导入项目:







这样导入方式可直接在eclipse上操作SVN,即如图





上两图所示,可从eclipse中的team直接操作更新SVN,而该项目的源文件并不能做与SVN的任何操作。

第二种导入方式:由SVN直接在电脑上下载源文件,再原生导入:



checkout文件:



下载后的源文件可直接操作SVN,导入eclipse后不能操作,如图:






SVN具体功能

一、commit与updata功能

commit:将本机代码提交到SVN服务器

updata:将服务器代码更新至本地

最常出现的两种状况:

1.在commit的时候,若是本地文件的版本号高于SVN的版本号,可成功提交,不同之处本地覆盖SVN,若是本地版本号低于SVN版本号(也就说明有队友在你之前也提交了相同的文件,导致SVN版本号高于本地版本号),commit的时候SVN会提示需先updata,将本地版本更新至最新版本才能再提交,否则会commit失败。注:当本地版本号低于SVN版本号时是不能成功提交的!

2.在updata的时候,若是SVN的版本号高于本地的版本号,则能正常updata,有不同之处SVN覆盖本地,若是SVN的版本号低于本地文件的版本号,则会产生冲同(原因是同时与队友修改了相同的文件,导致该文件版本号高于本地版本号),这时源文件则会报错,出现SVN的标识,标识为不同版本的冲突之处,一般以“〈〈〈〈”“〉〉〉〉”〉作为分割。解决方法是解决完冲突后重新提交改正过后的冲突文件,使本地版本号与SVN版本号同时更新至最新状态。



二、show log功能

显示曾经提交的历史,如图:



三、操作失误还原功能:

当误删代码或者代码被覆盖时可找回(恢复、回滚),如图



四、分支  合并功能:

支持超多人集体开发;

http://energykey.iteye.com/blog/512745

五、SVN提交时忽视某个文件夹不提交:

http://blog.163.com/gis_warrior/blog/static/193617173201393072612284/

安卓项目中的文件有:

.settings
.svn
asserts
bin
gen
lib
res
src
.classpath
.project
AndroidManifest.xml
proguard.cfg
project.properties

其中一定不能传的有:bin  gen  .svn   .settings
一定要传的有: src(类文件) res(布局文件) AndroidManifest.xml(注册表) lib(jar包存放地)asserts(能打包至APP内但不被编译的数据文件夹)
可传可不传无影响:.classpath .project(adt版本) proguard.cfg
  (记录所用jar包,系统位数等本信息) project.properties(记录安卓API版本)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: