- SVN的工作机制
- C/S结构
-
- 基本操作
- 检出(Checkout)
- 把服务器端版本库内容完整下载到本地。
- 在整个开发过程中只做一次。
- 更新(Update)
- 把服务器端相对于本地的新的修改下载到本地。
- 提交(Commit)
- 把本地修改上传到服务器。
- 安装服务器端程序
-
yum install -y subversion
验证
[root@rich ~]# svn --version
svn,版本 1.7.14 (r1542130)
编译于 Apr 11 2018,02:40:28
版权所有 (C) 2013 Apache 软件基金会。
此软件包含了许多人的贡献,请查看文件 NOTICE 以获得更多信息。
Subversion 是开放源代码软件,请参阅 http://subversion.apache.org/ 站点。
可使用以下的版本库访问模块:
* ra_neon : 通过 WebDAV 协议使用 neon 访问版本库的模块。
- 处理“http”方案
- 处理“https”方案
* ra_svn : 使用 svn 网络协议访问版本库的模块。 - 使用 Cyrus SASL 认证
- 处理“svn”方案
* ra_local : 访问本地磁盘的版本库模块。
- 处理“file”方案
-
- 创建版本库
- SVN服务配置文件
-
/etc/sysconfig/svnserve
# OPTIONS is used to pass command-line arguments to svnserve.
#
# Specify the repository location in -r parameter:
OPTIONS="-r /var/svn"
- 创建版本库目录
-
mkdir -p /var/svn
- 在版本库目录下创建具体项目目录
-
mkdir pro_oa
- 创建SVN版本库
-
svnadmin create /var/svn/pro_oa
- 版本库内容
- 将来的访问方式
-
- 启动SVN服务
-
systemctl start svnserve.service
systemctl enable svnserve.service
-
- 开启匿名访问
- 配置文件
-
版本库根目录/conf/svnserve.conf
- 配置项
-
anon-access = write
-
- 关闭selinux
- 配置文件
-
/etc/sysconfig/selinux
- 修改
-
SELINUX=disabled
- 重启
-
reboot
-
-
3.命令行客户端
- 创建两个工作区目录模拟两个开发人员
mkdir -p /root/workspace/harry
mkdir -p /root/workspace/sally
-
- 检出
- 作用:完整下载版本库中的全部内容。
- 命令:
- svn checkout svn://192.168.70.140/pro_oa ./
- 附加效果
- 在指定目录下创建.svn目录
- 保存本地目录和文件状态信息,用来和SVN服务器进行交互
- 工作副本
- .svn所在的目录
- 版本控制相关操作都需要在工作副本目录下执行。例如:提交、更新等等这样的操作。
- 为了保证工作副本能够正常和服务器进行交互,请不要删除或修改.svn目录中的内容。
-
- 添加
- SVN要求提交一个新建的文件前先把这个文件添加到版本控制体系中。
- svn add 文件名
- 提交
- 要求1:附加日志信息
- 日志信息相当于写Java代码时的注释,用来标记本次操作所做的修改。
- svn commit -m "xxx" [文件名]
- 要求2:必须具备相应的权限
- 使用文本编辑器打开版本库根目录/conf/svnserve.conf文件
把匿名访问配置项的注释打开。注意:行的开头不能有空格
[root@rich harry]# svn commit hello.txt svn: 提交失败(细节如下): svn: “/root/workspace/harry/hello.txt” 尚未纳入版本控制 [root@rich harry]# svn add hello.txt A hello.txt [root@rich harry]# svn commit hello.txt svn: 提交失败(细节如下): svn: 无法使用外部编辑器获得日志信息;考虑设置环境变量 $SVN_EDITOR,或者使用 --message (-m) 或 --file (-F) 选项 svn: 没有设置 SVN_EDITOR,VISUAL 或 EDITOR 环境变量,运行时的配置参数中也没有 “editor-cmd” 选项 [root@rich harry]# svn commit -m "My first commit" hello.txt svn: 提交失败(细节如下): svn: 认证失败 [root@rich harry]# svn commit -m "My first commit" hello.txt 增加 hello.txt 传输文件数据. 提交后的版本为 1。 |
-
- 查看服务器端文件内容
[root@rich harry]# svn list svn://192.168.70.140/pro_oa good.log hello.txt |
-
- 更新操作
- 作用:把服务器端文件所产生的所有修改下载到本地
- 命令:svn update [文件名]
4.冲突
-
- 过时的文件
- 概念:在一个相对服务器端版本来说是旧版本的基础上进行了修改的文件。
- 要求:所有过时的文件都必须先执行更新操作,更新后在最新版基础上修改的文件才允许提交。
- 冲突的产生
- 条件1:本地当前编辑的文件已经过时。
- 条件2:从服务器端更新下来的修改和本地的修改在“同文件同位置”不一致。
- 冲突的表现
- 文件内
- 目录内
xxx.mine文件:发生冲突时本地文件内容
xxx.r[小版本号]文件:发生冲突前文件内容
xxx.r[大版本号]文件:发生冲突时服务器端文件内容
-
- 冲突的手动解决
- 第一步:删除冲突发生时产生的三个多余文件
- 第二步:删除冲突文件内多余的符号
- 第三步:把文件编辑到满意的状态
- 第四步:提交
- 冲突的半自动解决
- 设置SVN_EDITOR环境变量
vim /etc/profile ------------------------------------------- SVN_EDITOR=/usr/bin/vim export SVN_EDITOR ------------------------------------------- source /etc/profile echo $SVN_EDITOR |
- 解决的过程
- 使用e选项进入文件内容编辑界面
-
- 进入vim编辑器编辑文件内容
-
- 编辑完成后使用r选项标记为已解决
-
- 减少冲突的发生
- 尽可能在修改文件前先进行更新操作,尽量在最新版基础上修改文件内容。
- 尽量减少多人修改同一个文件的可能性。
- 加强团队成员之间的沟通。