SVN学习

在中小型企业中开发一般会用到SVN 进行分布式开发,通过学习,熟悉以后的开发流程

概念

这个百度吧,概念一般很专业,但不容易懂

CVS SVN GIT 三者之间的区别

SVN介绍与安装

SVN 分服务器端和客户端,一般客户端在本地创建代码库,服务端是在远程服务器上搭建代码库

注意:在使用命令的时候要搞清算是服务端命令还是客户端命令

版本库的创建与删除—–服务端命令

1
2
svnadmin create 路径
<!--创建服务器版本库 -->

可以添加参数指定版本库储存的数据类型

1
2
svnadmin create --fs-type fsfs 版本库的名称
<!-- fsfs表示数据保存类型 -->

删除版本库

1
rm -rvf 删除的文件夹

版本库配置

位于版本库文件下的 path/repos/conf 文件夹
其中有三个文件

1、svnserve.conf文件

在svn版本库权限上注意更新的概念:

  1. 更新代码:是从服务器更新到本地的操作
  2. 提交代码:是从本地修改的代码提交到服务器上的过程

打开svnserve.conf

前两个表示在无用户密码的情况下只有只读的权限,
再有密码情况下拥有读写提交上传的权限

1
2
password-db = 路径(默认password)
<!-- 表示密码文件的路径 -->

1
2
<!-- authz-db = 路径(默认authz)
表示用户文件的路径 -->

2、password文件

格式 如上
添加一个didiaoyuan用户 密码为123456
以此后面用户都可以按照这个格式添加

3、authz文件

如图中注释

版本库的访问
需要先搭建svn服务启动,其他客户端才能访问
运行svn服务

1
svnserve -d -r /路径/版本库

获取checkout —–客户端命令

1
2
3
svn co(checkout) svn://版本库服务器地址
(--username imocc --password 123456)[括号内可以不添加]
<!-- 首先进入输入服务器密码 -->

获取checkout —–客户端图形界面管理

下载tortoiesSVN

在文件夹先右键



第一行填写版本库服务器地址

第二行需要导入的文件夹地址

SVN自启动

概念,当服务器开启自动启动svn服务
linux 开机根据启动级别启动
乌邦图下etc/rc.local文件中 exit 0 上面 写入 svn启动服务命令 svnserve -d -r /路径

不同系统下修改的方式不同,可通过百度或者google查询修改方式

SVN常见术语与文件状态

常见的客户端命令


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1.svn add --添加到版本控制文件中
<!-- 在svn客户端下从无版本控制状态添加文件到版本控制下 -->
svn add 文件名或文件夹 --当时用文件夹时,会自动递归添加文件夹下的所有文件
svn add 文件夹 --non--recursive --添加所有文件的时候
svn add *
<!-- 注意:当出现前面只添加了文件夹没添加里面内容时,使用*只会把没有添加的添加上并且只扫描到文件夹不会添加文件夹中的文件
解决 -->
svn add * --force --强制执行
svn commit -m "" 文件名 --提交修改到服务器
<!-- 创建一个新的版本号 缩写 ci -->
类似git
svn commit -m "" --可以添加备注信息 并提示版本号
svn update --更新工作副本
<!-- 当已经更新最新版本更新在使用命令将不会进行更新,默认只更新一次 -->
svn delete --从版本库中删除文件或者目录
svn diff(di) -r 需要比较的版本号
--版本差异比较 版本号 1:3 比较版本1和3
svn mkdir --创建目录并添加到版本控制
svn cat --路径文件 --脱离版本控制,查看文件

工作副本还原

1
2
svn revert * --只会扫描当前目录的所有修改后还原
svn revert --recursive * --递归扫描其他文件夹中的

二进制冲突与树冲突

场景:冲突常出现在工作副本长时间未更新
冲突:在其他程序员提交相同位置代码到代码块,而自己因为没有update,在相同的位置下进行修改,当发生提交的时候发生冲突
二进制冲突:文件一般是二进制,精确到代码的那一行
树冲突:不是二进制文件,无法精确具体一行
处理冲突

解读:

update 弹出输入提示

1
2
3
4
5
6
p:推迟提交
df:显示不同
e: 编辑文件
m:合并
mc:保留自己
tc: 保留别人的

df 对比图中

1
2
3
+<<<<<<自己的代码
=======
+>>>>>> xxx人的代码

推荐p推迟处理,推迟后回生成冲突文件,删除不需要的

1
2
3
<!--通过文件修改后必须使用一下命令-->
svn resolved 文件名
<!--消除冲突后提交-->

锁定与解锁

1
2
svn lock -锁定文件,防止其他成员对文件进行提交
svn unlock -解锁文件

lock 是一种conflict 处理方案,当遇到很多人对同一个文件进行修改,锁定只会影响开发效率

问题1:服务器上的版本库文件在哪里?

  1. 把文件上传到SVN版本库后,上传的文件不再以文件原来的格式存储,而是被svn以它自定义的格式压缩成版本库数据,存放在版本库中。(17年9月26日)
(*^▽^*)