SVN 学习

SVN

SVN是subversion的缩写,是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。

SVN属于C/S结构软件,分为客户端和服务器端

服务端软件:VisualSVN

网址:https://www.visualsvn.com/

客户端软件:Tortoisesvn

网址:https://tortoisesvn.net/downloads.html

指令介绍

Checkout(检出)

第一次与svn服务器联系,并把项目更新到本地

  1. 链接到svn服务器端
  2. 更新服务器端数据到本地

注意Checkout只在第一次时才使用,其余若要更新数据则使用Update

Update(更新)

更新svn服务器代码到本地

Commit(提交/上传)

把代码上传到服务器

  • 提交本地数据到服务器端

具体工作流程

1574946102264.png

软件安装

服务端软件安装(VisualSVN)

配置8443端口号、仓库等设置后进行安装

SVN服务端配置

  1. 创建一个项目

    1. 首先在SVN服务端创建一个公有目录WebApp作为项目目录

    2. 在WebApp目录下创建Shop文件夹,作为Shop(版本仓库)

    3. 创建版本仓库,基本语法(DOS环境):

      svnadmin create 项目名 文件夹路径
      

      Shop 仓库目录结构

      1574954547749.png
  1. 进行服务端监管

    客户端输入svn://localhost(或ip地址)可以访问到相关数据仓库(如示例的Shop仓库)

    要想要客户端能访问到数据仓库,需要服务端启用该仓库的监管服务

    svnserve -d -r 服务端的版本仓库目录
    

    -d 在后台运行

    -r 监管目录

  2. 权限控制

    默认情况下,svn服务器是不允许匿名用户上传文件到服务器端的,要更改项目的相关配置文件。

    anon-access = write
    # auth-access = write
    

    让auth-access属性值为write,使该仓库可读可写

SVN客户端软件安装与使用

安装完成后

  1. 在客户端目标文件夹下右击checkout
  2. 在弹出的窗口中输入svn://服务器地址(也可以在URL of repository右面的目录中检查),点击OK
  3. 如果当前文件夹下出现.svn/的隐藏文件夹,说明客户端已经和服务器端建立起了联系

项目经理创建项目

在有文件需要提交时,在当前文件夹下右击选择SVN Commit

  1. 进入窗口后填写备注信息,选择需要上传的文件,然后点OK提交
1575042984737.png
  1. 出现以下界面,说明提交成功

    1575043487030.png

程序员编写项目

以上工作大部分是由项目经理完成的,程序员需要完成另外的操作

  1. 在文件夹下右击进行检出操作
1575084453192.png
  1. 如果有新文件要提交,直接右击Commit(需要填写备注信息和勾选文件)

    一般以上指令是在模块开发完毕后上传

项目经理检查进度

  1. 需要使用Update指令

    一般直接右击Update直接更新文件,系统会直接更新到最新版本

其他使用详解

文件图标

右击---》 TortoiseSVN--》setting--》 Icon Overlays--》 Icon Set

  1. 1575085612459.png

常规图标:当客户端文件与服务器端文件完全同步

  1. 1575085684229.png

冲突突变:当客户端提交的文件与服务器端数据有冲突

  1. 1575085853062.png

删除图标:当服务器端数据已删除

  1. 1575085853062.png

增加图标:当我们编写的文件已添加到提交队列

  1. 1575086033381.png

无版本控制图标:当我们编写的文件没有添加到上传队列

  1. 1575086122515.png

修改图标:当客户端文件有修改但未提交

  1. 1575086175637.png

只读图标:当客户端文件以只读形式存在时

  1. 1575086222373.png

锁定图标:当服务器端数据已锁定

  1. 1575086279764.png

忽略图标:客户端文件已忽略,不需要进行上传

忽略文件

希望有一些文件不上传到svn服务器,应该将该文件或该类型的文件添加至忽略列表

右击文件--》 TortoiseSVN--》 Add to ignore list--》 选择忽略的方式(忽略某个文件或某个类型的文件)

版本管理

版本回退

文件夹空白处右击TortoiseSVN--》 Update to revision...--》

1575087914609.png

一般根据日志进行版本回退

1575088018164.png

解决版本冲突

在实际项目开发中,如果两个人同时修改某个文件就会产生版本冲突问题

1575099316038.png

解决方法

  1. 合理分配项目开发时间

  2. 合理分配项目开发模块

  3. 通过svn解决版本冲突问题

    1. 更新服务器端数据到本地(出现冲突后)

      1575099451572.png
  直接Update

  冲突文件会出现其他的副本文件
1575099541187.png

​ hello.java:整合后的hello.java文件

​ hello.java.mine:冲突当事人修改后的hello.java文件

​ hello.java.rx:代表x版本的文件,版本号低的一般代表起始状态,版本号高的是其他人修改文件后的版本

  1. 删除除hello.java以外的其他三个文件
  2. 修改整合hello.java文件
  3. 重新提交解决冲突

配置多仓库与权限控制

配置多仓库

在实际项目开发中,我们可能会同时开发多个项目,那么我们如何进行多项目监管呢?

如果通过svnserve进行仓库监管,但是监管指令只能同时监管某一个文件夹,而不能同时监管多个仓库。

答:可以通过监管WebApp总目录来达到监管所有仓库的目的

svnserve -d(后台运行) -r(监管目录) WebApp(项目总目录的路径)

此时svn://localhost或ip地址 是来访问WebApp目录的,如果需要访问里面的Shop项目或者Wechat项目

Shop项目:svn://localhost/Shop

Webchat项目:svn://localhost/Wechat

权限控制

如果要使用权限控制功能,要有一个前提:必须首先开启权限功能,在每一个仓库中都有一个conf文件夹,里面有四个文件,其中

authz文件为授权文件,告诉哪些用户具有哪些权限

passwd文件为认证文件,标识当前svn系统中某个仓库具有哪些用户以及相应的密码

默认情况下,以上两个文件都是禁用的,如需使用,首先要在svnserve.conf配置文件上开启以上两个文件

开启步骤:

  1. 注释匿名用户的可读可写权限

    给anon-access加上注释

    ### users have read and write access to the repository.
    # anon-access = write
    # auth-access = write
    
  2. 开启认证文件与授权文件

    取消两个注释

    password-db = passwd  #一般在27行
    
    authz-db = authz  #一般在36行
    
  3. 编写认证文件定义相关用户名与密码

    打开passwd文件,等号左边为用户名,右边为密码

    [users]
    # harry = harryssecret
    # sally = sallyssecret
    
    admin = admin888
    itcast = 123456
    
  4. 编写授权文件

    打开authz文件

    groups为用户分组

    [aliases]
    # joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
    
    [groups]
    # harry_and_sally = harry,sally
    # harry_sally_and_joe = harry,sally,&joe
    # 组名 = 组员(组员间用“,”隔开)
    admin = admin
    itcast = itcast
    
    # [/foo/bar]
    # harry = rw
    # &joe = r
    # * =
    
    # [repository:/baz/fuz]
    # @harry_and_sally = rw
    # * = r
    [Shop:/] #Shop为项目文件夹名
    @admin = rw #r为可读,w为可写
    @itcast = r
    * = r #代表匿名用户
    
  5. 测试

    如果* = r时,所有用户都能Checkout到项目,但当要提交修改时,会出现用户验证

    1575101901427.png

此时可以输入管理员账号admin admin888,或者普通员工账号itcast 123456

SVN服务的配置与管理

  1. 配置服务的自动启动服务(开机自启)

    Window系统

    创建系统服务

    sc create 服务名称 binpath= "服务的可执行文件 --service -r WebApp的路径"start= auto(binpath=和start=后面都要带上一个空格)

    sc create SVNService binpath= "svnservice安装目录\bin\svnserve.exe --service -r WebApp的路径" start= auto
    
    
  2. 配置批处理文件

    Window系统(SVNService为服务名称)

    1. 创建stop.bat文件

      net stop SVNService
      
      
    2. start.bat文件

      net start SVNService
      
      
    3. delete.bat文件

      sc delete SVNService
      
      

实际开发模拟

1575103226077.png

通过钩子程序,让svn服务器上的程序同步到web服务器

钩子程序

所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化属性的修改

默认情况下,钩子的子目录(版本仓库/hooks)中包含各种版本库钩子的模板

1575103491707.png

post-commit.tmpl:事务完成后所触发的钩子程序

钩子程序默认情况可以采用批处理指令或Shell指令来进行编写

通过批处理指令编写钩子程序

  1. 指定svn服务器工作目录

    SET SVN="SVNService的安装目录\bin\svn.exe"
    
    
  2. 指定web服务器工作目录

    SET DIR="服务器端目录"
    
    
  3. 通过update指令实时更新数据到DIR目录中

    SVN update %DIR%
    
    
  4. 编写post-commit.bat文件(文件放在hooks文件夹内)

    SET SVN="SVNService的安装目录\bin\svn.exe"
    SET DIR="服务器端目录"
    SVN update %DIR%
    
    
  5. 使用步骤

    1. 在服务器目录下通过svn服务更新项目
    2. 有人更新文件到svn服务器上,服务器上的文件也会更新

你可能感兴趣的:(SVN 学习)