zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    关于动态的添加iview admin路由以及刷新侧边栏按钮
    Qt配置,载入html,Echart, 交互
    junit、hamcrest和eclemma安装、使用
    程序中关于浮点数计算的问题
    洛谷P1164->小A点菜
    一道简单的题目
    P1101:单词方阵
    第一个博客
    php生成条形码
    php 上传音频(MP3、MP4等)文件 获取播放时间长度
  • 原文地址:https://www.cnblogs.com/xingdongpai/p/5197003.html
Copyright © 2011-2022 走看看