SVN详解

1.为什么要使用SVN?

    • 为了解决多人协同开发环境下的具体问题。

 

2.什么是SVN?

    • SVN是Subversion的简称,是一款版本控制工具。

    • 常见版本控制工具:CVS→SVN→GIT

 

3.SVN工作模式

4.服务器端安装和配置

4.1 服务器端程序的安装

    • 运行Setup-Subversion-1.8.9-1.msi

    • 一直下一步

    • 在安装过程中选择安装目录时使用非中文无空格目录    • 使用svn --version命令验证出现如下内容就证明安装成功(安装好之后会自动在path文件中注册,如果安装不成功,我们需要在后面加一个;这样在验证就可以了)

C:\Users\Creathin>svn --version
svn,版本 1.8.9 (r1591380)
   编译于 May  8 2014,13:53:01 在 x86-microsoft-windows
Copyright (C) 2014 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/
可使用以下的版本库访问模块:
* ra_svn : 使用 svn 网络协议访问版本库的模块。  - 使用 Cyrus SASL 认证
  - 处理“svn”方案
* ra_local : 访问本地磁盘的版本库模块。
  - 处理“file”方案
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
  - using serf 1.3.5
  - 处理“http”方案
  - 处理“https”方案

 

4.2 配置服务器端版本库

    • 目的:创建一个专门的目录用来为SVN程序保存数据

    • 第一步:自己创建一个文件夹

    • 第二步:在命令行执行svnadmin create命令,命令的格式是

svnadmin create D:\DevRepository\Subversion

    • 结果

    • 启动服务器端程序:命令行启动

svnserve -d -r D:\RepSVN\CRM

 

4.3 启动服务器端程序:注册为Windows服务形式启动(推荐使用)

    • 借助于Windows系统的sc.exe程序,在命令行窗口中是sc命令

    • 使用sc命令的create子命令创建服务

    • 创建服务器时需要指定服务的名称,指定服务对应的可执行程序的路径,指定服务默认的启动方式,指定依赖的协议.

sc create 服务名 binpath= "可执行程序的路径 可执行程序本身运行时需要的参数" start= auto depend= Tcpip

     ※注意:上面的命令中要求所有的“=”左边不能有空格,右边必须有一个空格!

    • binpath属性中的命令

D:\DevInstall\Subversion\bin\svnserve.exe --service -r D:\RepSVN

    • 完整的命令举例

sc create SVNService binpath= "D:\DevInstall\Subversion\bin\svnserve.exe --service -r D:\RepSVN" start= auto depend= Tcpip

    • 启动此服务:sc start 服务名(例如:sc start MySVNService)

      说明:打开命令行窗口运行 netstat –an 查看3690端口是否被监听,如果启动失败,那很有可能是binpath中的内容有错误,此时只能将已经创建的服务删除,重新创建。

 

5.客户端工具使用:命令行 

5.1 检出

     执行检出命令后,会在目标目录自动创建一个隐藏的.svn目录。这个目录中保存了当前工作副本和服务器之间交互的重要信息,所以不要删除或修改这里面的内容。

工作副本:包含.svn的目录。 

 

5.2 提交

    • 需要通过运行svn add命令将要提交的文件纳入到版本控制体系

D:\SVNSpace\Harry>svn add Hello.txt
A         Hello.txt

    • 提交文件时需要通过附加日志信息的方式进行必要的说明,以记录本次提交的相关情况,直接操作没有权限,所以接下来执行第三部,这一步在后续执行。

    • 提交文件需要具备服务器端目录的写权限,可以暂时将匿名访问功能打开。

D:\RepSVN\CRM\conf\svnserve.conf

     使用文本编辑工具打开上面文件,编辑如下内容

anon-access = write

      注意:这其实是一个属性文件,所有内容都必须顶格,前面不能有其他内容,包含空格也不可以。

    • 提交命令举例

D:\SVNSpace\Harry>svn commit -m "My First Commit" Hello.txt
正在增加       Hello.txt
传输文件数据.
提交后的版本为 1。

5.3 更新

D:\SVNSpace\Harry>svn update Hello.txt
正在升级 'Hello.txt':
U    Hello.txt
更新到版本 2。

 

6.客户端工具使用:Eclipse插件(推荐使用)

6.1 Kepler

    • 解压eclipse_svn_site-1.10.5.zip文件

    • 复制到Eclipse的安装目录下的dropins目录下

    • 重启Eclipse

    • 验证

 

6.2 ≥Luna:再次不具体示例。

 

6.3 基本操作

    • 创建工程上传到SVN服务器。

    • build目录:由于存放的字节码文件在不同开发人员之间可能存在差异,从而造成冲突,所以build目录不加入版本控制体系,每个开发人员自己负责编译,检出一个项目后需要将build目录添加至svn:ignore

    • 冲突

a.冲突的起因都是有“文件过时 ”。文件过时含义:修改当前文件时所依据的版本已经不是服务器端最新的版本。

b.过时的文件不能提交,必须更新后才可以提交。

c.如果更新下来的文件和当前文件修改的是同一个位置,那么就会产生冲突。

d.冲突的表现1:在冲突文件内部

e.冲突的表现2:增加3个文件

以mine为扩展名的文件中是冲突时的本地文件内容
以r小版本号为扩展名的文件中是冲突的服务器端文件内容
以r大版本号为扩展名的文件中是冲突后服前务器端文件的最新内容

    • 图标含义

:当前目录或文件中没有未提交的修改

:新创建出来,尚未纳入版本控制体系

:已加入版本控制体系

:表示有未提交的修改

:表示当前文件发生了冲突


    • SVN中各种符号箭头含义

[1].黄色感叹号(有冲突):
这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人的修改。
[2].米字号(有本地修改代码): 这是说明你有未提交的本地代码。
[3].问好(新加入的资源):  这说明该文件是项目中新增文件资源,新增资源可以是文件、图片、代码等。
[4].红色感叹号(本地代码与库没有保持一致): 这说明本地代码跟库上没有保持一致,如果用户想修复,可以将带红色感叹号图标文件删除,直接update即可。
[5].灰色向右箭头(本地修改过) :本地代码没有及时上库。
[6].蓝色向左箭头(SVN上修改过) :记得更新代码后修改,提交前跟svn对比习惯。
[7].灰色向右且中间有个加号的箭头(本地比SVN上多出的文件) :修改完记得跟svn保持一致.
[8].蓝色向左且中间有个加号的箭头(SVN上比本地多出的文件) ,删除该文件后,再次更新,将svn上文件全部更新下来.
[9].灰色向右且中间有个减号的箭头(本地删除了,而SVN上未删除的文件) ,也就是说你删除确认后,一定要记得上库,跟svn保持一致
[10].蓝色向左且中间有个减号的箭头(SVN上删除了,而本地未删除的文件) :比对svn库上代码,确定需要删除后,更新svn(删除无用代码)。
[11].红色双向箭头(SVN上修改过,本地也修改过的文件 ) :这个表示本地和svn上都修改过,最好就是把本地修改合并到svn,修改代码前最后先更新。

 

7.权限控制

7.1 基本设置:svnserve.conf

# anon-access = write——表示匿名用户没有任何权限
auth-access = write——表示授权用户有读写权限
password-db = passwd——表示使用passwd文件来设置用户名、密码
authz-db = authz——表示使用authz文件来进行授权

7.2 设置用户名、密码:在passwd文件中

[users]
# harry = harryssecret 例子
# sally = sallyssecret 例子
kaifa01 = 123456
kaifa02 = 123456
ceshi = 123456

7.3 分配权限:在authz文件中

[groups] ——创建用户组
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
kaifazu = kaifa01,kaifa02
[/] ——针对版本库根目录进行设置
@kaifazu = rw ——针对某个用户组进行设置
ceshi = r ——针对某个用户设置
* =——表示除了上面设置的用户,其他用户都没有任何权限

7.4 查看资源历史记录

解决办法:将anon-access设置为none

 

8.客户端工具使用:TortoiseSVN

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值