一,SVN的三大操作
SVN三大操作:
checkout: 检出 功能:① 链接到SVN服务器 ② 更新服务端数据到本地
Update: 更新
commit: 提交本地数据到SVN服务器
注:checkout只在第一次链接时使用,之后如果进行更新就使用update进行操作
例:Commit提交本地数据到服务器
① 在本地链接的目录新建一个文件"待学清单.txt"
② 将文件提交到服务器
例:新建一个WQL,把服务器上的数据更新到本地
二,SVN版本回退
有些时候,软件运行时可能出现意料外的错误,或许是新版本导致的,如果想重新写就可以用版本回退功能,回退到旧版本
三,SVN版本冲突
什么是版本冲突:在实际项目开发中,如果两个人同时修改某个文件就会产生版本冲突问题
例1:演示版本冲突
有两个程序猿WQL和FQ,WQL和FQ都在9:00点的时候更新了服务器端最新的数据,再对原来的待学清单文件进行修改,在10:00的时候WQL完成提交了,10:10的时候FQ也修改完成了提交,这时FQ提交就会出现版本冲突
FQ提交结果:
SVN解决版本冲突:
① 更新服务器端数据到本地
待学清单.txt:整合后的index.php文件
待学清单.txt.mine:修改后的 '待学清单.txt' 文件
待学清单.txt.r11:r11为版本号,更新修改时的版本
待学清单.txt.r12:更新修改后的版本
② 删除除了原文件"待学清单.txt"以外的三个文件
③ 修改整合后的冲突文件
④ 重新提交到SVN服务器
四,SVN多仓库和权限控制
一,配置多仓库
再实际项目开发中可能会同时开发多个项目,在之前我们通过svnserve进行仓库监管,但是监管指令只能监管某一个文件夹,而不能同时监管多个仓库,那如何才能监管多个多个仓库呢?
解决方法:可以通过监管一个总目录来达到监管所有仓库的目的,那个总目录就是总仓库
svnserve -d(后台运行) -r(监管的目录) 项目总仓库
例:下载有一个order_cloud和stock_cloud两个项目,它们要被同时监管访问
① 新建一个总仓库目录repository,将两个项目放进去
② 对repository进行监管
svnserve -d -r ./repository
配置之后的访问:
svn://localhost可以直接访问repository目录
如果需要访问order_cloud或者stock_cloud项目,svn://localhost之后加上项目名即可,比如:svn://localhost/order_cloud
二,权限配置
默认SVN的权限功能是不开启的, 假如需要权限功能要进行一系列配置
SVN的权限是以仓库为单位的, 当连接到这个仓库才会触发权限,不同的仓库权限可以不一致
配置权限的文件有三个:在每一个仓库的conf目录中
authz文件 --> 授权文件 :告诉那些用户具有那些权限
passwd文件 -->认证文件 :保存当前svn仓库具有那些用户及相应的密码
svnserver.conf -->总配置文件 :这里主要是开启仓库授权和认证功能(默认是关闭)
① 在svnserve.conf文件中开启授权和认证
password-db = passwd
authz-db = authz
注:如果在SVN开启了匿名用户可读可写,需要注释掉(anon-access = write)
② 配置passwd认证文件添加用户名和密码
格式:用户名 = 密码
admin = 123 #用户admin,密码123
wql = 123456
③ 配置authz授权文件
步骤:
定义用户分组
声明资源
为分组声明权限
配置之后访问库:
五,钩子程序
钩子程序就是版本库事件触发的程序,例如新版本的提交
钩子程序的作用:实现版本库和web等服务器之间的数据共享
钩子程序的目录:版本程序/hooks/目录中,它包含各种版本库钩子模板
start-commit 提交前触发事务
pre-commit 提交完成前触发事务
post-commit 提交完成时触发事务
pre-revprop-change 版本属性修改前触发事务
post-revprop-change 版本属性修改后触发事务
钩子程序在linux中使用Shell指令进行编写:以post-commit为例
#!/bin/bash
# description:用于实时检出的钩子
# 基本变量
export LANG=en_US.UTF-8
dateTime=`date +%F`
dateTimeMinute=`date +%H%M%S`
binSvn=/usr/local/subversion-1.8.5/bin/svn # 你svn的绝对路径
dirHtmlApp=/data/site/wql.luoqin.ltd #检出的web站点根目录
logFileName=/tmp/svnhooks_${dateTime}.log
# svn配置
REPOS="$1"
REV="$2"
# 检出或者更新subversion,钩子的核心功能
echo "-- $dateTimeMinute" >> $logFileName
if [ ! -d $dirHtmlApp/.svn ]; then
# 检出SVN
echo "$binSvn co file://$REPOS/ $dirHtmlApp" >> $logFileName
$binSvn co file://$REPOS/ $dirHtmlApp
if [ $? -eq 0 ]; then
echo "checkout ok" >> $logFileName
else
echo "checkout error" >> $logFileName
fi
else
# 更新svn
echo " $binSvn up $REV $dirHtmlApp " >> $logFileName
$binSvn up $REV $dirHtmlApp >> $logFileName
if [ $? -eq 0 ]; then
echo " update sucess " >> $logFileName
else
echo " update fial " >> $logFileName
fi
fi
echo "--" >> $logFileName
编写钩子完成之后的步骤:
1,复制post-commit.tmpl为post-commit.sh文件
2,客户端更新数据到SVN服务端
3,更新之后,这个数据可以在web服务器端实时获取
4,可以通过web服务器的形式访问更新文件
六,SVN图标集释义
Comments | NOTHING
Warning: Undefined variable $return_smiles in /www/wwwroot/wql_luoqin_ltd/wp-content/themes/Sakura/functions.php on line 1109