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(提交/上传)

把代码上传到服务器

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

具体工作流程

 

软件安装

服务端软件安装(VisualSVN)

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

SVN服务端配置

  1. 创建一个项目

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

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

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

      截图:

        复制代码:svnadmin create 项目名 文件夹路径



  Shop 仓库目录结构

  

 

2.进行服务端监管

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

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

截图:

 

复制代码:svnserve -d -r 服务端的版本仓库目录
 

-d 在后台运行

-r 监管目录

 

3.权限控制

默认情况下,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提交

     

  2. 出现以下界面,说明提交成功

     

 

程序员编写项目

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

  1. 在文件夹下右击进行检出操作

 

  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...--》

 

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

 

 

解决版本冲突

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

 

解决方法

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

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

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

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

       

       复制代码:

        直接Update
      
        冲突文件会出现其他的副本文件

       

          

      

 

        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到项目,但当要提交修改时,会出现用户验证

 

此时可以输入管理员账号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

     
     

    实际开发模拟

     

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

    钩子程序

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

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

     

    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服务器上,服务器上的文件也会更新
       


 
 

作者:核动力挖掘机
链接:https://www.jianshu.com/p/d593ec12ea65
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

posted @ 2023-09-23 17:50  Jweib  阅读(29)  评论(0编辑  收藏  举报