目录结构:

contents structure [-]

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

先列出笔者的环境:

SVN服务端(VisualSVN-Server)版本:3.6.0

SVN客户端(TortoiseSVN)版本:1.8.10

运行环境:Window7 X64

TortoiseSVN1.8.10 集成了客户端和服务端的功能,如果是在本机测试的话,就只需要装这个软件就可以了。如果需要单独搭建SVN服务器的话,那么建议在服务器上装VisualSVN-Server版本。

1,安装客户端

将资源下载好以后,点击TortoiseSVN进入安装页面,这里笔者将客户端安装到了: D:\workSoftware\exe\install\TortoiseSVN\localSVN\installPacakage

2,安装服务端

客户端安装好了以后,我们就来安装服务端,双击打开:Subversion,这里笔者将地址安装到了 D:\workSoftware\exe\install\TortoiseSVN\serverSVN\InstallPackage

3,创建仓库

这个仓库是服务端存放数据的地方,笔者在 D:\workSoftware\exe\install\TortoiseSVN\serverSVN\data\ 的目录下建立了仓库 projectManage ,方法为在dos窗口中输入svnadmin create 仓库地址,笔者就需要打开dos窗口,输入 svnadmin create D:\workSoftware\exe\install\TortoiseSVN\serverSVN\data\projectManage

,仓库创建好后,在该目录下会生成一些文件。

4,启动仓库

创建好仓库后,就需要启动仓库,方法为在dos窗口中输入svnserve -d -r 仓库地址,比如笔者的 svnserve -d -r D:\workSoftware\exe\install\TortoiseSVN\serverSVN\data\projectManage

这个窗口不要关闭。如果下一次,需要传输文件,也需要把这个再次这样启动,或者也可以配置成为自动启动。

5,创建客户端与仓库取得联系

在本地新建两个文件夹,user1和user2,分别代表本地两个不同的用户。

进入这两个文件夹,分别右击 检出 -> svn://IP ,这个时候在这个文件夹里面会有一个隐藏的.svn文件夹。

6,使用svn服务

在上面建立的user1文件夹下面,建立新文件,比如HelloWorld.java.

然后选中该文件,右击-> add -> add(表示本地.svn对该文件形成管理)

然后再 右击->commit,这里需要注意,如果是首次提交会因为没有权限而错误。进入到仓库的文件夹下面,笔者的就是projectManage文件夹,找到conf文件夹里面的svnserve.conf文件,把里面的anon-access改为write.

7,SVN密码管理

在上面第6点中,我们把anon-access取消了注释,并且把的值改为了write。这样的话所有的非验证用户都拥用读写仓库的权限,在团队管理中,这显然是不安全的。接下来笔者将会讲解一下,仓库(respository)下文件夹conf下的每个文件的作用。以及如何给每个用户分配权限。

在创建完成仓库后,conf文件夹下有4个文件,分别是authz、hooks-env.tmpl、passwd和svnserve.conf文件。

svnserve.conf文件的部分内容在第6点中,已经贴出了部分。下面来完整的讲解一下这些文件:

svnserve.conf控制着svnserve进程的配置信息。svnserve.conf大致包含如下信息:

[general]
#anon-access = read
#auth-access = write
#password-db = passwd
#authz-db = authz
#groups-db = groups
#realm = My First Repository
#force-username-case = none
#hooks-env = hooks-env [sasl]
#use-sasl = true
#min-encryption = 0
#max-encryption = 256

这些值默认都是被注释的,下面笔者列举其中几项:
anon-access 控制非鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。即"write"为可读可写,"read"为只读,"none"表示无访问权限。缺省值:read。
auth-access 控制鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。即"write"为可读可写,"read"为只读,"none"表示无访问权限。缺省值:write。
password-db 指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf目录的相对路径。在有些版本该缺省值是"passwd",但在笔者的版本中,并没有提及。
authz-db 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。除非指定绝对路径,否则文件位置为相对conf目录的相对路径。在有些版本该缺省值是"authz",但在笔者的版本中,并没有提及。
realm 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)。
force-username-case 指定是否进行强制大小写字符转化,"upper"、"lower"和"none"。缺省值是"none"。
hooks-env 指定环境配置文件

这里讲解一下realm作用,在使用svn客户端访问svnserve服务器时,若需要用户登录,则提示信息如下:

Authentication realm: <svn://192.168.0.141:3690> 8c147aa4-598e-d649-a1e9-e7e8f4edf2c3
Password for 'harry':

在上述第1行"Authentication realm: <svn://192.168.0.141:3690>"之后显示的字符串为认证域名称。如果在配置文件中为设定认证域,就会提示一个UUID,如上述所示。
如果在配置文件配置如下信息:
realm = test
那么svn客户端在访问svnserve服务器时,需要登录的提示信息如下:

Authentication realm: <svn://192.168.0.141:3690> test
Password for 'harry':

realm信息就替换成了test,如上所示。

passwd是svnserve的一个密码文件示例。笔者的passwd文件默认内容如下:

[users]
#harry = harryssecret
#sally = sallyssecret

authz是svnserve的一个授权文件示例。笔者的authz文件默认内容如下:

[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 # [/foo/bar]
# harry = rw
# &joe = r
# * = # [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

下面的配置可以帮助理解这些节点的含义:

[group]
admin = aaa,bbb,ccc
vip = a1
man = b1
custom = c1 //这里先设定有这么多个角色和用户
//假设库的名字叫cp
//下面在cp下建立2个平行的目录vip和main
[/]
@admin=rw //表示根目录下只有admin才有读写权限
[cp:/]
*=r //在cp库下,除了admin下,所有人都有读的权限
@admin=rw //在cp库下,admin具有读写的权限
[cp:/vip]
*= //除了vip和admin之外,所有人没有任何权限
@vip=rw //
@admin=rw //
[cp:/main]
*= //除了以下角色外,其他人没有任何权限
@admin=rw //
@vip=rw //
@man=r //

实际的案例文件中还生成了许多注释信息,读取可以详细许多你们仓库中conf文件夹下的各个文件的的注释信息。

接下来贴一下,能够进行密码控制的配置文件,和演示:

svnserve.conf文件中[general]节点:

[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz

passwd文件中[user]节点:

[users]
harry = harryssecret

authz文件末尾加上:

[/]
harry = rw

这样配置的话,harry用户就对仓库根目录([/])有读写权限了。

下面笔者通过dos命名来展示一下:

svn checkout svn://192.168.0.141
echo null > a.txt
svn add *
svn commit * -m testfile --username harry --password harryssecret

有什么问题,可以通过svn help ...查看帮助信息。

除了可以通过DOS命令输入密码,还可以在客户端通过右键在SVN连接中提供的工具进行连接,在必要的阶段也会提示你输入密码,在弹出的命令框中输入svn地址进行连接。如果没有弹出密码提示框,那么可以删除 C:\Users\Administrator\AppData\Roaming\Subversion\auth 目录下的所有文件。

在上面的配置文件中,我们配置了anon-access = read,这就是说所有人都可以查看仓库的内容(无需验证),如果只想要有授权的人才可以读取和修改仓库的内容的话,可以改为anon-access = none。

8.SVN的仓库布局和常规命令

每一个仓库的布局方式都应该按照
项目 ->
        branches
        tags
        trunk
如果只有一个项目的话,那么就可以省略项目文件夹。

例如:
$ svn list file:///var/svn/single-project-repo
trunk/
branches/
tags/

$ svn list file:///var/svn/multi-project-repo
project-A/
project-B/

$ svn list file:///var/svn/multi-project-repo/project-A
trunk/
branches/
tags/

可以结合第7点中权限分配那一节,对不同的文件夹赋予不同的用户权限。

下面是一些关于SVN服务的常见操作
svn mkdir 地址/文件夹名称 #在目标地址下创建指定文件夹
svn list 地址 #显示地址下的文件信息
svn copy 地址1 地址2
svn checkout 地址 #检出
svn add 文件 #添加到本地
svn update 文件 #更新
svn commit -m 描述信息 #提交
...
输入svn help查看更多信息

解释一下update和commit的区别:
提交(commit):是用本地文件覆盖服务器的文件,只有提交会导致服务器上发生变化
更新(update):只是把服务器上最新版本下载到客户端,规则如下:
1、如果你本地的某个文件没有修改过,而服务器上的这个文件别人已经提交过新版本,那么会用服务器上最新的文件覆盖你本地的文件;
2、如果你本地的某个文件你修改过了还没有提交,服务器端的这个文件还没被别人改过,那么对你本地的这个文件没有任何影响;
3、如果你本地的某个文件你修改过了还没有提交,服务器端的这个文件已经被别人改过,那么会提示你发生冲突,会将服务器上最新版文件、你新修改的文件、发生分歧前的那个版本的文件都存放到你的本地

建议:在commit之前,先进行update操作。

9.分支、合并和标签

接下笔者要讲解一下SVN中的分支(branch)、合并(merge)和标签(tag)。在上面的第8节中,我们讨论过一个标准的项目目录下,应该要有branches、trunk和tags三个文件夹。这三个目录就对应了这一节要讲的知识。

在项目开发中,不同的项目组需要进行分工开发,最后将所有的代码合并起来,组成一个完整的项目。
如图:

所有的这些分支(branch)最开始都是从主干(trunk)拷贝而来的,当这些分支完成某一个阶段的任务后,就可以向主干进行合并。(注:svn几乎所有的操作都是联网的,这与Git不同)

如何创建分支(branch)?
分支最开始就是主干的拷贝体,所以可以通过svn copy命令创建分支:

svn copy 地址1 地址2 -m 注释

其中地址1就是拷贝的源地址,地址2就是拷贝的目标地址。
SVN客户端提供图形化界面的操作方式:


在To path一栏,选择要创建的路径,该路径之前是不应该存在的。

在创建好分支后,就可以通过分支仓库来开发代码,等主干需要合并分支代码时(或相反),就可以通过merge来完成。
SVN客户端同样提供了图形化界面的操作方式:
在主干的仓库下,合并我们刚才创建好的分支


选择需要合并的分支。

如果主干需要创建当前文档的备份信息,那么可以创建一个标签(tag)。标签同样也是文档的拷贝体,所以也可以通过svn copy来创建其标签,svn copy的具体语法笔者就不再赘述了。
SVN客户端同样提供了创建标签的图形化界面:

分支和主干的概念是相对的,父分支也是子分支的主干,合并同理。标签不是只能用于主干,而且可以用于任何有权限能够创建备份的地方。

【svn】解析subversion的使用的更多相关文章

  1. 什么是SVN(Subversion)? 为什么要用SVN? (2011-09-05 15:09:47) 转载 ▼

    转自:http://blog.sina.com.cn/s/blog_54ccd3500100tkvo.html 什么是SVN(Subversion)? 有一个简单但不十分精确比喻: SVN = 版本控 ...

  2. 企业中真实需要的集中管理软件SVN即Subversion版本控制

    一.SVN基本概念 SVN是Subversion的简称,是一个自由开源的版本控制系统. checkout: 把整个项目源码下载到本地 update: 从服务器上更新代码,使本地达到最新版本 commi ...

  3. 安装和配置SVN服务器Subversion、客户端TortoiseSVN和Visual Studio插件AnkhSvn

    1.下载并安装服务器端Subversion下载地址:http://subversion.apache.org当前最新版本为1.8.10,默认安装目录为C:\Program Files\Subversi ...

  4. CentOS6.3下安装配置SVN(Subversion)

    #检查是否安装了低版本的SVN [root@localhost ~]# rpm -qa subversion subversion--.el6.x86_64 #卸载旧版本SVN [root@local ...

  5. CentOS6.X下安装配置独立SVN服务器Subversion server

    Subversion(简称SVN,svn),一个开放源码的版本号控制系统.相较于RCS.CVS,它採用了分支管理系统,它的设计目标就是代替CVS.互联网上非常多版本号控***务已从CVS转移到Subv ...

  6. linux安装svn客户端subversion及使用方法

    1.下载 [maintain@HM16-213 software]$ wget http://subversion.tigris.org/downloads/subversion-deps-1.6.1 ...

  7. 使用命令行 Subversion 访问项目源文件(SVN)

    from:http://www.open.collab.net/scdocs/ddUsingSVN_command-line.html.zh-cn 命令行 Subversion 入门 如果您参与的项目 ...

  8. [转]Win7 64位搭建本地SVN服务器 Apache+Subversion

    转载地址:http://blog.sina.com.cn/s/blog_4f072a7001015j5z.html 一.工具下载 01.SVN 服务器Subversion:Setup-Subversi ...

  9. tortoise svn无法识别subversion check向下代码来解决

    使用eclipse小工具subversion check代码后,tortoise svnclient(版本号1.8.8)无法识别,不显示svn图标. 根据每个试验后的线上不实际的解决方案.试过的方法: ...

随机推荐

  1. 快讯:微软安卓版个人助理(Cortana)在美国境内进行公測

    8月24日,"Microsoft starts public test of Cortana app for Android smartphones"(此文8月24日发表),此事意 ...

  2. Word批量调整插入图片大小

    做标书,word中需要插入大量图片,实为一些证书.文件的扫描文件.但插入后,大小不是想要的,太小了,打印出来看不清.需要调整,需要批量调整. 这是一个不错的方法: 选中第一张图片,按页面调整大小到适合 ...

  3. Unity3d -> Xcode 多个渠道版本发布文件合并

    第一步: Users/xxx/.jenkins/jobs/projectname/workspace/build/iOS_iphone 把这里面所有文件拷贝到生成的xcode 工程下的Data目录 如 ...

  4. 008-Go 关于字符串拼接

    如果是少量小文本拼接,用 “+” 如果是大量小文本拼接,用 strings.Join 如果是大量大文本拼接,用 bytes.Buffer package main import( "fmt& ...

  5. Android 调用webservice并解析

    这是调用webService的具体方法 private final static String nameSpace="http://tempuri.org/"; private f ...

  6. Flash:彻底理解crossdomain.xml、跨swf调用。

    安全域.crossdomain.xml,到处都有各种各种零碎的基础解释,所以这里不再复述这些概念. 本文目的是整理一下各种跨域加载的情况.什么时候会加载crossdomain,什么时候不加载.   1 ...

  7. iOS变量定义在 .h 还是 .m 中

    前言 曾经我定义变量一直都是定义在.h文件里.后来看别人的代码,发现非常多人都把一些变量定 义在.m文件里. 后来我自己试了一把,发现变量既能够定义在.h文件里也能够定义在.m文 件中,尽管这是个非常 ...

  8. UAC 实现原理及绕过方法

    目录 0x00 UAC 工作流程 0x01 UAC 实现方法(用户登陆过程) 0x02 UAC 架构 0x03 触发UAC 0x04 UAC 虚拟化 0x05 UAC 逆向分析 1x00 UAC By ...

  9. 基于Echarts的股票K线图展示

    发布时间:2018-10-31   技术:javascript+html5+canvas   概述 基于echarts的股票K线图展示,只需引用单个插件,通过简单配置,导入数据,即可实现炫酷复杂的K线 ...

  10. 基于贪心算法求解TSP问题(JAVA)

    概述 前段时间在搞贪心算法,为了举例,故拿TSP来开刀,写了段求解算法代码以便有需之人,注意代码考虑可读性从最容易理解角度写,没有优化,有需要可以自行优化! 详细 代码下载:http://www.de ...