SVN

 

一  SVN是什么?

    

  1.1  实际项目开发暴露的问题 

    【问题产生】

    问题一:当分模块开发时,多个人分别写不同的模块,那么如何把代码整合在一起呢?显然手动copy,paste面对小项目还好,面对大项目难免懵逼。

    问题二:如果你说你有那个精力去copy,paste整合代码的话,但如果整合后的项目代码编译,运行出错了呢?这个错误要责任到个人话,你该去寻找谁呢? 

    问题三:当面对一个大型项目,假如先做了项目A,在项目A的技术上做了项目B,在项目B的技术上做了项目C。可以理解B项目是A项目的1.0版本,C项目是A项目的2.0版本。项目A,B,C都有用户在使用,此时项目A出现了BUG,那么我们需要修改项目A,B,C三个项目中的相同BUG(已经对项目A,B,C进行备份),那你就要面临对所有版本修复相同的bug错误,这就是版本迭代开发项目要面临的问题

    【总结问题】

      (1)  代码管理混乱。(2)  备份多个版本,占用磁盘空间大。(3)  解决代码冲突困难,容易引发BUG。

      (4)  难于追溯问题代码的修改人和修改时间。(5)  难于恢复至以前的版本。无法进行权限控制。(6)  项目版本发布困难。

    【问题解决】

     使用SVN版本控制软件

      解决问题一:团队成员每天把写的代码提交到svn,svn自动帮你整合代码

      解决问题二:svn对每天提交的代码,有详细的loggin,包括提交时间,提交人,提交代码等等。还有个重要的一点,svn可以把项目恢复到错误产生之前的版本,再把项目变为错误产生之后的版本。通过这两个版本之间的一些提交loggin,来缩小排错范围

      解决问题三:svn超简单解决

 

  1.2  与github比较

    svn与当今的github功能相似,但也有些许差别。

      (1)  svn是一个服务器,离开服务器无法提交。github可以进行离线提交,任何地方都可以提交

      (2)  svn不能分布式管理版本控制软件。github是针对开源项目用的多,可以分布式管理版本控制软件

      (3)  svn适合团队开发,github适合整个宇宙一起开发

  1.3  版本控制软件产生的效果

    openstack这个开源项目,就是通过版本控制软件,集社会之智慧来发展。

    openstack是什么?

      平时软件运行在操作系统中,云端有自己的操作系统,hadoop就是云计算的应用软件的一种,提供了高平发分布式的平台。hadoop必须运行在云端操作系统,openstack就是云端的操作系统。相当于paas层(服务层)。云端就是通过开源来发展。

 


 

 

二   svn的安装

  

  mac自带了svn,好像是因为我装了x code的原因,具体不太清楚,以后学到了linux再来补充这里。

 


  权限分为:

    认证(authentication ):身份验证

    授权(authorization ):访问权限


 

三  服务端角度,操作仓库

 

  2.1  检验是否安装成功

svnserve --version

    terminal显示结果:

  

  2.2  创建仓库 

    2.2.1  仓库的位置

      环境是mac下操作,我们在/Users/apple下创建了一个svn文件夹。用来充当svn仓库。

    2.2.2  创建仓库

svnadmin create /Users/apple/svn/s2sh

    2.2.3  库里的文件

      config(负责权限的文件夹):

        authz:授权

        passwd:认证

        svnserve.conf:

      db:存放版本控制产生的数据

      hooks(钩子):

        一些编辑脚本,每当我们提交到仓库时,就把记录发送到我们的邮箱,svn本身没有这个功能,我们使用脚本来提供额外的功能

      locks(上锁):

        仓库中有的项目有很重要的文件,对该文件上锁,其他人无法从仓库中获取该文件 

  2.3  启动仓库

// -d:代表路径
// -r:为仓库路径。因为可以配置多仓库、我们在访问的时候就要指定具体的仓库  svn://localhost/s2sh

svnserve -d -r /Users/apple/svn(该路径是仓库路径,该路径下可以有多个仓库)

  2.4  检查是否启动仓库

//监听3690端口,如果成功启动仓库,说明svn在监听该端口
lsof -i:3690;

        

 


 

 

三  客户端角度,操作仓库

 

  3.1  创建用户

    其实就是在任意地方创建两个文件夹。来模拟两个用户,每个文件夹代表每个用户的仓库。

  3.2  从仓库checkout到客户端

svn checkout svn://localhost/s2sh /Users/user1

  3.3  从客户端提交数据到仓库

    第一步:

 

svn add /Users/user1/a.docx

    第二步:提交到对应的仓库   

//一定要添加 "-m 提交信息" ,才可以区别你每次提交的行为
svn commit -m "add a.docx" /Users/user1/a.docx

    【说明】

      可能当你添加了提交信息,还是会出现一个认证失败,也就是登录失败。因为svn默认不允许匿名用户登录,此时需要修改svnserve.conf。把anon-access = write这样修改后,才可以提交到仓库 

  3.4  从仓库checkout到客户端,

svn checkout svn://localhost/s2sh /Users/user2

终端显示:

  我们发现版本升级,并顺利checkout到了user1提交的a.docx

  3.5  修改

//不需要add,直接进行commit
svn commit -m 'a.docx update' /Users/user2/a.docx

  3.6  更新

svn update /Users/user2

  3.7  总结

  

  


 

 

四  客户端tortoise

 

  上面的属于客户端命令行操作,我们需要安装图形化客户端,但底层原理还是命令行式的,tortoise就是操作svn的客户端software。

  4.1   64位客户端一个问题

    “期望文件格式是1-4之间,发现了格式6”。应该修改仓库db中的format文件。把6改文4.

 


 

 

五  认证与授权

 

  开启认证与授权

//匿名用户没有任何权限
anon-access = none
//认证用户有写权限
auth-access = write
//授权文件
password-db = passwd
//认证文件
authz-db = authz

  认证:passwd

[users]
# harry = harryssecret
# sally = sallyssecret
//添加两个用户 user1 = user1 user2 = user2

  授权:authz

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
//定义s2sh组,组下有user1,user2两个用户
s2sh=user1,user2
//其中"/"代表s2sh仓库下的所有东西 [s2sh:/] //对于s2sh仓库来说 @组 下面的用户都可读可写 @s2sh=rw //除了s2sh组,其他组什么都不能做 *=

 


 

 

六  冲突的解决

 

  6.1  问题的出现

    加入A,B两个用户。

    首先A进行add,commit操作。B进行update操作。A进行修改,commit。然后B进行修改,commit的时候,会报冲突。

  6.2  图形化界面解决

    安装tortoise后,右键寻找edit conflict。可以进行解决了

  6.3  避免问题

    操作前,先使用"svn update"与仓库同步

 


 

 

七  分支,合并,切换

 

  在一开始我们提到的,假如先做了项目A,在项目A的技术上做了项目B,在项目B的技术上做了项目C。同时项目A,B,C都有用户在使用,此时项目A出现了BUG,那么我们需要修改项目A,B,C三个项目中的相同BUG,该问题就是项目迭代开发中会出现的问题。而且我们需要对项目A,B,C进行备份,这个问题,我就要开始用svn进行解决。

  1.会有很多副本产生

  2.每当项目a出现bug,修复起来很麻烦

  3.不利于管理

  开始进行改善

    

 

  实际开发

    1.  创建oa仓库

    2.  在仓库下创建三个文件:truck,tags,branches

    3.  把正在开发的项目导入truck中

    4.  把truck中的项目checkout到eclipse中

    5.  开发完成的项目发布到tag中。(分支过程)

    6.  继续开2.0,项目1出现了bug

    7.  tags检出到branches中

    8.  修复branches中项目的bug

 

posted @ 2016-02-21 22:34  a617475430  阅读(264)  评论(0编辑  收藏  举报