这个教程,不做分支的更新和分支到主干的合并。统一都布局到主干中。
准备:
项目目录:/www/wwwroot/xyz
SVN版本库文件夹:/www/svn
SVN版本库:/www/svn/pros
主干:/www/svn/pros/trunk
标签:/www/svn/pros/tags
一、安装宝塔
通过链接宝塔面板下载,免费全能的服务器运维软件复制宝塔的安装链接
二、通过宝塔创建站点
我这边的站点目录:/www/wwwroot/project
三、安装SVN
1、检测是否安装过subversion
rpm -qa | grep subversion
2、未安装subversion,安装subversion
yum -y install subversion
3、查看subversion版本号,存在则安装成功
svnserve --version
四、创建版本库
1、创建版本库目录文件夹(根据自己喜好创建),用来存放所以版本库
mkdir -p /www/svn
2、创建版本库
svnadmin create /www/svn/pros
//在svn文件夹下生成pros文件夹,该文件夹下包括了以下目录和文件:
//db目录:所有版本控制的数据存放文件。
//hooks目录:放置hook脚本文件的目录。
//locks目录:用来放置锁定数据的目录,用来追踪存取文件库的客户端。
//format文件:是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号。
//conf目录:仓库的配置文件,包括仓库的访问账号和权限等配置。
//README.txt:一个说明文件。
五、配置文件
1、修改passwd文件,配置访问账号密码:
[users]
zbg=zbg123
2、修改authz文件,配置用户权限:
[groups]
admin=zbg
[/]
@admin=rw
3、编辑svnserve.conf文件:
anon-access=none
auth-access=write
password-db=passwd
authz-db=authz
realm=pros
六、启用SVN服务
1、启用服务
svnserve -d -r /www/svn/ --listen-host 0.0.0.0
2、停止svn服务
killall svnserve
3、查看svn服务是否启用
//一条记录说明未开启,两条记录才是开启
ps aux | grep svnserve
七、创建主干
//创建主干
svn mkdir -m "这是主干" file:///www/svn/pros/trunk
//创建分支---这个教程不用
svn mkdir -m "这是分支" file:///www/svn/pros/branches
//创建标签
svn mkdir -m "这是tag" file:///www/svn/pros/tag
八、项目导入同步
1、项目导入主干--也可以直接windows系统中直接上传
svn import -m "这是第一版本-备注说明" /www/wwwroot/xyz/ file:///www/svn/pros/trunk
2、初始化工作副本到项目中
//把主干的内容同步到项目目录文件夹下
svn checkout file:///www/svn/pros/trunk/ /www/wwwroot/xyz
//通过拷贝主干到分支中创建--这边不需要使用
svn copy -m "创建第一分支" file:///www/svn/pros/trunk/ file:// /www/svn/pros/branches/branch1
九、钩子创建
1、钩子配置:
#钩子路径:www/svn/pros/hooks/post-commit
#第一种写法
#!/bin/sh
REPOS="$1"
TXN="$2"
#SVN服务路径
SVN=/usr/bin/svn
#SVN版本库
SVN_DATA=/www/svn/pros
#项目路径
WEBzhy=/www/wwwroot/xyz
#日志
DAY=`date +%Y-%m-%d`
LOGzhy=/www/svn/log/pros/svn_updata_$DAY.log
#编码
export LANG="zh_CN.UTF-8"
#export LANG="en_US.UTF-8"
CURDATE=`date`
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Code Deployed at $CURDATE" >> $LOGzhy
svn update --username zbg --password zbg123 $WEBzhy >> $LOGzhy
#设置权限
chmod -R 777 $WEBzhy >> $LOGzhy
#有变动才更新文件
#for dir in `svnlook dirs-changed $SVN_DATA`
#do
# $SVN update --username zbg --password zbg123 -N $WEBzhy/$dir >> $LOGzhy
#done
#chmod -R 777 $WEBzhy >> $LOGzhy
#第二种写法
#!/bin/sh
# 添加路径验证
SVN_PATH=/www/wwwroot/xyz
SVN_URL=svn://IP/pros/trunk
export LANG="zh_CN.UTF-8"
CURDATE=`date`
DAY=`date +%Y-%m-%d`
LOG_FILE=/www/svn/log/pros/svn_updata_$DAY.log
# 添加同步日志
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Starting sync from $SVN_URL to $SVN_PATH" >> $LOG_FILE
# 强制更新命令(添加错误处理)
svn cleanup $SVN_PATH --username zbg --password zbg123 2>> $LOG_FILE
svn update --force --username zbg --password zbg123 $SVN_PATH >> $LOG_FILE 2>&1
# 验证退出状态
if [ $? -eq 0 ]; then
echo "Sync completed successfully" >> $LOG_FILE
else
echo "Sync failed with error code $?" >> $LOG_FILE
fi
2、钩子权限设置
//设置钩子权限
chmod +x /www/svn/pros/hooks/post-commit
//查看钩子权限
ls -l /www/svn/pros/hooks/post-commit
#这种说明有权限:-rwxr-xr-x 1 www-data www-data 832 Jun 15 10:23 post-commit
# ↑ 这里的x表示有执行权限
十、windows拉取代码
//整个主干的文件
svn://IP/pros/trunk
//主干中指定文件夹
svn://IP/pros/trunk/addons
注:
1、宝塔安全中:需要开放3690端口
2、服务器安全策略:需要开放3690端口
3、开机自动启动SVN服务,需要创建服务文件
4、通过命令强制更新
# 1. 确认本地工作副本与主干关联状态(在项目根目录执行)
svn info
# 2. 强制更新工作副本(注意会覆盖本地修改)
svn update --accept theirs-full
# 3. 检查SVN地址是否指向主干(URL应包含/trunk路径)
svn info | findstr "URL"
# 4. 重新提交并添加提交注释(示例)
svn commit -m "强制同步到主干"
# 5. 查看提交历史验证(最后一条应为你的提交)
svn log -l 1
# 检查工作副本状态
svn info /www/wwwroot/xyz
# 清理工作副本
svn cleanup /www/wwwroot/xyz --remove-unversioned
#手动测试同步
svn update --force --username zbg--password zbg123/www/wwwroot/xyz
#查看最近提交记录
svn log /www/svn/pros-l 5
5、存在未提交的本地冲突(使用svn resolved
解决冲突)
注:
1、关于提交代码提示.user.ini文件权限无法修改问题
#查看文件属性
lsattr 文件绝对路径
#如果文件属性有i或者a--删除
chattr -ia 文件绝对路径 #这时候提交就正常了
#如果想要恢复属性i或者a
chattr +ia 文件绝对路径
2、关于钩子配置完提示zh-CN.UTF-8不存在问题:要么修改为en_US.UTF-8,要么安装zh-CN.UTF-8