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服务器上,服务器上的文件也会更新
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • SVN学习笔记 SVN背景知识 SVN,全称Subversion, 是一个开放源码的集中式版本控制系统,这里需要注...
    颜洛滨阅读 829评论 0 3
  • 前言 为了工作内容学习SVN。SVN是一个C/S类型的版本管理,对服务器依赖很大,大部分操作是和SVN服务器有关的...
    linanwx阅读 287评论 0 0
  • 在一个项目中有多个成员共同开发,其中各自所负责的模块并不相同,所以svn给其分配的权限也要不同,以防止zhangs...
    小沙鹰168阅读 6,934评论 0 1
  • 上一节已经把svn安装完成,下来就用命令行做一些简单的操作。 1、当svn安装完成后,svn管理人员会在svn的r...
    小沙鹰168阅读 520评论 0 0
  • 在上一节中已经实现了用命令行对svn做一些基本的操作,但是在平时的使用中,一般是不直接用命令行进行操作的。而是要使...
    小沙鹰168阅读 978评论 0 1