SVN

作者: 阿栋oxo | 来源:发表于2019-07-14 22:09 被阅读0次

公司情况:

1、现在的软件开发一般是项目进行,一个项目中会有很多人参与,那么每个人手中都有自己的一份修改备份,最后谁的版本是最新的?
2、有时候一款软件开发出来之后会有很多个版本,比如1.0版本、2.0版本,而且每个大版本下面还有小版本,如1.1.1、2.2.1等版本,如此多代码如何管理?(SVN就可以解决这些问题,现在也有另外一种方式就是git,git下次再介绍)

Subversion简介

一款自由开放的版本控制软件(简称SVN)

  • 功能
    Subversion可以管理文件、文件夹以及记录它们的修改状况。
  • 应用
    Subversion常用来帮助我们管理软件开发的源代码或是公司文档。
  • 具体实现
    Subversion通过将文档导入至版本库中进行管理,版本库类似于文件服务器,但比文件服务器更加强大的是,它可以记录用户每次对文件或目录的修改状况,并提供还原数据至老版本的功能。

svn场景模拟

流程1:

版本库是我们存放资料的地方,图中用户A和用户B经常需要对版本库中的资料进行读写操作。现在两个用户都从版本库中将数据复制到了本地,此时用户电脑上的数据是版本库的副本。

  • 客户端可以通过三种方式连接至服务器取得版本库中的数据
    1.本地连接(不需要联网)
    2.SVN连接(分为加密和不加密的,需要联网)
    3.Apache连接(需要联网)
流程1.png
流程2:

两个用户分别在自己的电脑上对副本文件进行修改,分别为版本A1和版本B1,并且用户A先与版本库进行了数据同步,将本地的最新版本数据更新到服务器上,服务器上的版本会被更新至A1版本。

流程2.png
流程3:

随后用户B也将自己的版本B2与服务器数据版本同步,则服务器会提醒用户B,他的版本已经过期了,如果用户A和用户B修改的数据并不冲突,(如两个修改的是版本库中的不同文件,或是同一个文件的不同位置)则更新,SVN可以自动将两个版本合并成一个版本;如果两个人修改的位置冲突,则需要人工判断谁的修改有效,最后再上传至版本库。

流程3.png

SVN服务器不同访问方式对比

客户端访问服务器时可以通过种方式访问:
1.svnserve访问
2.svnserve+SSH访问
3.Apache间接访问
4.本地访问

  • 服务器启动一个svnserve服务,svnserve是一个小巧、轻便的服务器程序,客户端通过使用Subversion专用的协议对他进行访问,其特点是简单
  • 由于svnserve本身并不提供数据加密通信的功能,所以,如果你需要更加安全地连接,可以使用svnserve+ssh的方式与服务器建立SSH隧道连接,再通过SSH调用svnserve程序,实现数据的安全加密传输。
  • Apache通过mod_dav_svn模块也可以访问版本库,这样客户端可以通过访问Apache取得版本库资料,从而完成对数据的版本控制,其优点是用户可以直接使用浏览器访问版本库。
  • 最后一种是本地方式连接服务器,这种方式最大的好处是不需要联网,就可以对服务器做直接的操作,但是实际工作中,客户端和服务器往往不在相同的主机,所以应用相对较少。
各种连接方式的比较
功能 Apache+DAV svnserve Svnserce+SSH
认证 HTTP基本认证、LDAP、证书 支持MD5认证 SSH认证
权限 可对版本库整体设置权限,也可以对指定目录设置权限 可对版本库整体设置权限,也可对指定目录设置权限 仅对版本库整体设置权限
加密 支持SSL加密 支持SSH隧道加密
日志 完善的Apache日志
速度
设置 相对复杂 简单 相对简单

安装SVN的方式

SVN的服务搭建

1、安装版本库软件

yum -y install subversion

2、创建服务器版本库

mkdir /svn
svnadmin create /svn/web_project/

使用svnadmin创建版本库,会自动生成如图1的文件


图1 Web_project目录下的文件和目录.png

3、认证和授权
当客户端访问版本库服务器时,服务器会根据版本库目录下的conf/svnserve.conf文件中定义的认证与授权策略实现权限的控制

只发布一个版本库

默认SVN会将服务器计算机中所有的版本库共享给网络用户,但有时我们仅希望发布其中一个版本库时,就需要限制仅发布Web_project一个版本至网络,这样客户端可以使用相对路径访问版本库,同时服务器如果需要在authz为目录设置权限,路径应该为[/]或[/test],即这里的根[/]仅表示Web_project版本库,[/test]表示Web_project下的test目录。使用 -r 选项,后面接版本库的路径,就可发布个别版本库给网络用户。

1、仅发布一个版本库/svn/Web_project,客户端可以通过相对路径访问版本库Web_project(即svn://192.168.129.150/Web_project),通过绝对路径访问(即svn://192.168.129.150/svn/Web_project),无效。

绝对路径.png
相对路径

2、
发布个别版本库(错误)
svnserve -d -r /svn/Web_project不生效(想具体到版本库的,不行,应该为版本库的路径)


svn服务端.png
win7客户端

仅发布个别版本库(正确)
svnserve -d -r /svn/
svnserve -d -r/svn


svn服务端.png
win7客户端.png

SVN的工具

  • svnadmin
  • svn
  • svnlook
  • svnservn

工具说明:

  • svnadmin工具是Subversion软件所提供的版本库管理工具,该工具可以用来创建库、备份库、修订版本等操作。
    用法:svnadmin 命令 /版本库路径 [选项]
    命令:
    create 创建一个新的版本库
    hotcopy 版本库热备
    lslocks 打印所有的所描述
#创建版本库project1
svnadmin create /var/svn/project1
#热备版本库
svnadmin hotcopy /var/svn/project1 /var/svn/project1_copy
  • svn是subversion客户端命令行工具。
    用法:svn 命令 [选项]
    选项:
    --password 密码
    --username 用户名
    --revision(-r) 指定要检查的版本
    命令:
    add 添加文件、目录或符号链接(此处的文件、目录或符号链接是在本地副本创建的)
    cat 输出特定文件的内容
    checkout(co) URL[@REV][PATH]
    commit(ci) 将本地工作副本修改后的内容发布到版本中
    copy SRC DST 将工作副本中的一个文件或目录复制至版本库
    delete PATH 从本地工作副本中删除一个项目
    delete URL 从版本库中删除一个项目
    diff 比较两个版本之间的差别
    import 提交一个路径的副本至版本库
    info 显示本地或远程版本信息
    list(ls) 列出版本库的数据

add的用法:客户端创建文件和目录时就要用到add


add的用法.png

log的用法


整体的日志.png
某个文件的日志.png
  • svnlook是subversion检查工具
    用法:svnlook 命令 /版本库路径 [选项]
    命令:
    author 显示作者
    cat 显示版本库的文件内容
    date 显示时间标记
    log 显示日志消息
    tree 显示版本库资料树

  • svnserve:SVN服务器程序
    svnserve -d 后台运行

Linux中将代码导入仓库

  • svn客户端命令行工具:可以将项目代码导入到版本库中
#import代表导入操作,file:///代表本地连接 -m后面是说明性的字符串,可以是任意字符。
svn import /var/Web_code file:///var/svn/project1/ -m "Initial Data"
#列出版本库中的资料列表
svn list file:///var/svn/project1

svn checkout file:///svn/Web_project


image.png

相关文章

网友评论

      本文标题:SVN

      本文链接:https://www.haomeiwen.com/subject/ojzikctx.html