SVN之服务器端环境搭建
一 SVN的工作机制
- C/S结构图
- 基本操作
(1)检出:checkout
把服务器端版本库内容完整下载到本地, 在整个开发过程中只做一次。
(2)更新:update
把服务器端相对于本地的新的修改下载到本地。
(3)提交:commit
把本地修改上传到服务器。
二 服务器端环境搭建
- 安装服务器端程序
yum install -y subversion
验证:
[root@rich~]#svn --version
svn,版本 1.6.11(r934486) 编译于 Aug172015,08:37:43
可使用以下的版本库访问模块:
(1)ra_neon: 通过 WebDAV 协议使用 neon 访问版本库的模块。
– 处理“http”方案
– 处理“https”方案
(2)ra_svn: 使用 svn 网络协议访问版本库的模块。 – 使用 CyrusSASL认证
– 处理“svn”方案
(3)ra_local: 访问本地磁盘的版本库模块。
– 处理“file”方案
2. 创建并配置版本库
(1)创建版本库目录
mkdir -p /var/svn/repository
(2)在版本库目录下创建具体新项目目录
cd /var/svn/repository
mkdir pro_oa
(3)创建SVN版本库
svnadmin create /var/svn/repository/pro_oa
(4)版本库内容
3. 配置SVN对应的服务器
(1)思路
(2)SVN服务:svnserve,默认情况下不是开机自启动的
[root@richrepository]# chkconfig|grep svn
svnserve 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
[root@richrepository]#chkconfig svnserve on
[root@richrepository]#chkconfig|grep svn
svnserve 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
对应可执行脚本文件路径:/etc/rc.d/init.d/svnserve,注意备份
(3)SVN服务具体配置
原版:
args="--daemon --pid -file=${pidfile} $OPTIONS"
修改版:
args="--daemon --root 版本库根目录 --listen-port 指定端口号 --pid -file=${pidfile} $OPTIONS"
例如:
args="--daemon --root/var/svn/repository --listen-port 2255 --pid -file=${pidfile} $OPTIONS"
使用默认端口号的配置方式
args="--daemon --root/var/svn/repository --pid -file=${pidfile} $OPTIONS"
- 启动SVN服务
[root@richinit.d]#service svnserve start
正在启动 svnserve:[确定]
[root@richinit.d]#service svnserve status
svnserve(pid 3443) 正在运行...
[root@richinit.d]#netstat -anp | grep:2255
tcp 0 00.0.0.0:2255 0.0.0.0:* LISTEN 3443/svnserve
[root@richinit.d]#ps -ef | grep svnserve | grep -v grep
root 3443 1 0 11:41 ? 00:00:00 /usr/bin/svnserve --daemon --root
/var/svn/repository--listen-port2255--pid-file=/var/run/svnserve.pid
[root@richinit.d]#cat /var/run/svnserve.pid
344
三 命令行客户端
- 创建两个工作区目录模拟两个开发人员
mkdir -p/root/workspace/harry
mkdir -p/root/workspace/sally
-
检出
(1)作用:完整下载版本库中的全部内容
(2)命令: svn checkout svn://192.168.70.140/pro_oa./
(3)附加效果
① 在指定目录下创建 .svn 目录
② 保存本地目录和文件状态信息,用来和svn服务器进行交互
(3)工作副本
① .svn 所在的目录
② 版本控制相关操作都需要在工作副本目录下执行。例如:提交、更新等等 这样的操作
③ 为了保证工作副本能够正常和服务器进行交互,请不要删除或修改.svn 目 录中的内容。 -
添加
(1) SVN 要求提交一个新建的文件前先把这个文件添加到版本控制体系中
(2)命令:svn add 文件名 -
提交
(1)要求1:附加日志信息
① 日志信息相当于写 Java 代码时的注释,用来标记本次操作所做的修改
② 命令: svn commit-m"xxx"[文件名]
(2)要求2: 必须具备相应的权限
① 使用文本编辑器打开版本库根目录**/conf/svnserve.conf 文件**
把匿名访问配置注释打开。注意:行的开头不能有空格
[root@richharry]#svn commit hello.txt
svn: 提交失败(细节如下): svn: “/root/workspace/harry/hello.txt” 尚未纳入版本控制
[root@richharry]#svn add hello.txt
A hello.txt
[root@richharry]#svn commit hello.txt
svn: 提交失败(细节如下): svn: 无法使用外部编辑器获得日志信息;考虑设置环境变量 $SVN_EDITOR,或者使用 --message(-m) 或 --file(-F) 选项
svn: 没有设置 SVN_EDITOR,VISUAL 或 EDITOR 环境变量,运行时的配置参数中也没有 “editor-cmd” 选项
[root@richharry]#svn commit-m "Myfirstcommit" hello.txt
svn: 提交失败(细节如下): svn: 认证失败
[root@richharry]#svn commit-m "Myfirstcommit" hello.txt
增加 hello.txt
传输文件数据.
提交后的版本为 1。
- 查看服务器端文件内容
[root@richharry]#svn list svn://192.168.70.140/pro_oa
good.log
hello.txt
- 更新操作
(1)作用::把服务器端文件所产生的所有修改下载到本地
(2)命令:svn update [文件名]
四 冲突
- 过时的文件
(1)概念:在一个相对服务器端版本来说是旧版本的基础上进行了修改的文件
(2)要求::所有过时的文件都必须先执行更新操作,更新后在最新版基础上修改的 文件才允许提交。 - 冲突的产生
(1)条件1:本地当前编辑的文件已经过时
(2)条件2:从服务器端更新下来的修改和本地的修改在“同文件同位置”不一致 - 冲突的表现
(1)文件内
(2)目录内
三个版本的内容
4. 冲突手动解决
(1)删除冲突发生时产生的三个多余文件
(2)删除冲突文件内多余的符号
(3)把文件编辑到满意的状态
(4)提交
5. 冲突的半自动解决
(1)设置SVN_EDITOR环境变量
vim /etc/profile
SVN_EDITOR=/usr/bin/vim
export SVN_EDITOR
source /etc/profile
echo $SVN_EDITOR
(2)解决过程
① 使用e选项进入文件内容编辑界面
② 进入vim编辑器编辑文件内容
③ 编辑完成后使用r选项标记为已解决
6. 减少冲突的发生
(1)尽可能在修改文件前先进行更新操作,尽量在最新版基础上修改文件内容。
(2) 尽量减少多人修改同一个文件的可能性
(3) 加强团队成员之间的沟通。