目录
宝塔安装 SVN 服务并自动更新到 web 站点
1、宝塔根目录创建svn文件夹
2、用Xshell在根目录运行命令安装svn:
3、创建版本库:
4、进去cscrm下的conf目录编辑配置文件
5、配置钩子:让代码同步自动更新带 WEB 项目目录
6、去到项目目录上一层,一般是 www/wwwroot 下,运行首次更新命令:
7、本地计算机检出仓库项目
8、检出后,在提交更新,如果提交后,服务器没有自动更新,就再执行一次第6步
windows搭建SVN服务 与 自动更新站点
1、安装 VisualSVN Server
2、创建版本库
3、关联项目
自动更新到站点
编辑
问题:如遇到客户端推送报错
设置忽略文件
提交指定文件
①、查看命令:
rpm -aq subversion
②、安装命令:
yum -y install subversion
③、卸载命令:
yum remove subversion
④、停止命令:
killall svnserve
⑤、启动命令:
svnserve -d -r /svn
svnadmin create /svn/cscrm
①、会自动创建cscrm目录,并有一些配置文件
①、配置访问账号:authz文件
括号中是指哪个仓库,在此处指的是cscrm仓库,/代表当前仓库下的所有文件
格式:账户 = 权限,等号两边留一个空格,r:读,w:写
例:testuser = rw
②、配置访问密码:passwd文件
在 [users] 块中添加用户和密码
格式:帐号 = 密码 (等号两边留一个空格)
例:testuser = 123456
③、配置仓库配置文件:svnserve.conf
找到以下代码,直接去掉前面的 ##(代码顶行)
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = 版本仓库所在目录
进去cscrm下的hooks目录新建一个 post-commit 配置文件,或者复制上面的 post-commit.tmpl 去掉 .tmpl 后缀并清空里面的内容,修改文件权限为 777
①、添加内容:
#!/bin/sh
REPOS="$1"
REV="$2"
export LC_ALL="zh_CN.UTF-8"
export LANG="en_US.UTF-8"
SVN_PATH=/usr/bin/svn
WEB_PATH=/www/wwwroot/cscrm
SVN_USER=kangnjy
SVN_PASS=123456
LOG_PATH=/svn/cscrm/svn.log
echo `date "+%Y-%m-%d %H:%M:%S"` >> $LOG_PATH
echo `whoami`,$REPOS,$REV >> $LOG_PATH
echo `****************************************` >> $LOG_PATH
echo `****************************************` >> $LOG_PATH
$SVN_PATH update $WEB_PATH --username $SVN_USER --password $SVN_PASS --no-auth-cache >> $LOG_PATH
exit 0
②、前面内容说明:
WEB_PATH=/www/wwwroot/cscrm/ #WEB网站的根目录
SVN_USER=kangnjy #cscrm仓库的账号(有多个的话随便填写一个就好)
SVN_PASS=123456 #cscrm仓库的密码(有多个的话随便填写对应账号的密码)
LOG_PATH=/svn/cscrm/svn.log #svn日志(需要在/svn/cscrm下面新建一个svn.log的文件)
svn checkout svn://localhost/cscrm --username kangnjy --password 123456
注:localhost也可以替换成服务器IP,cscrm为版本仓库名称,后面加上账号密码运行后就不用再输入,不加的话运行 svn checkout svn://localhost/cscrm 后就要输入账号密码。
运行上面命令后,会自动创建一个 cscrm 文件夹,里面只有一个 .svn 文件
在项目目录右键检出,填写:svn://ip/仓库名称,然后提示要输入仓库账号和密码,就是上面配置的
注:遇到了不自动更新问题,解决了很久,最后成功了,做了以下动作,也不知道具体是哪一个解决的,记录下:
1、改了 post-commit 文件权限从 755 改为了 777 -- 已测试 755 也可以
2、钩子文件第一行加了:#!/bin/sh
3、钩子文件最后一行加了:exit 0
4、改了钩子文件中的配置,如下:
SVN_PATH=/usr/bin/svnserve
改为:
SVN_PATH=/usr/bin/svn
之前用下面命令查看的svn安装目录是/usr/bin/svnserve,但不知道是改后也能用还是才能用,以后再测试
which svnserve
准备一台用作搭建服务的主机
TortoiseSVN(客户端):官网下载
VisualSVN Server(服务端):官网下载
Location:安装目录
Repositories:版本库目录
Backups:备份目录
打开安装好的 VisualSVN Server
在 Repositories 右键 -- 新建 -- Repository...
输入项目名
第一项:创建空目录,第二项:创建三个默认文件目录
项目上右键复制版本库url(第一次会提示创建用户)
在项目目录右键检出
检出项目(需要填写前面创建的用户密码)
右键 -- 提交
在服务端刷新查看提交成功
关联后
正常操作是先 SVN更新 -- SVN提交
1、在svn服务端E盘拉取项目
svn co https://DESKTOP-0MD5559/svn/test11/
2、进入项目仓库版本目录的 hooks 文件夹下(里面的 tmpl 文件是一些参考模板)
找到 post-commit.tmpl 复制一份,修改后缀为 bat
提前配置好 svn 的环境变量(在系统变量path添加svn的安装目录D:\SVN\Location\bin)
WORKING_COPY -- 前面拉取的站点目录
username -- svn用户名
password -- svn密码
@echo off
SET REPOS=%1
SET REV=%2
SET DIR=%REPOS%/hooks
SET PATH=%PATH%;
SET WORKING_COPY=E:/test11
svn update %WORKING_COPY% --username admin --password 123456
用户名 -- 右键可修改密码
3、保存后,可以在控制台运行测试
如下更新成功(推送指定仓库成功)
如果报 svn: E155007: 错误:就是没有找到目录(也就是没有包含 .svn 的文件夹),修改上面的 WORKING_COPY 为拉取的站点目录即可
至此即可在客户端提交后,服务端经过 post-commit 钩子同步到关联站点
svn: E200031: sqlite[S8]: attempt to write a readonly database
原因是Visual SVN Server服务的执行权限不够,不能对指定目录做读写操作。
解决办法:
win+R 运行 services.msc 打开服务(也可从任务管理器 -- 服务 -- 打开服务)
找到 VisualSVN HTTP Service 服务 右键 -- 属性 -- 登陆 -- 选择本地系统账户,勾选允许服务与桌面交互;
保存后试下
参考:svn配置post-commit钩子 - 掘金
windows 下svn post-commit 无法同步更新的问题_51CTO博客_svn没有update和commit
1、在文件上面右键
去除版本控制并增加到忽略列表
2、批量忽略
在项目根目录右键 -- TortoiseSVN -- 属性 -- 新建 -- 其它 -- 属性选择 svn:ignore
3、全局配置
在项目根目录右键 -- TortoiseSVN -- 设置 -- 常规设置
初次提交指定文件(文件比较多时)可使用此方法
# --------- #
文件少可以在提交时按需选择提交
end 结束
参考
宝塔面板搭建SVN项目管理服务器并自动更新至WEB目录 - 白与黑 ~ 个人博客
解决自动更新问题参考
post-commit hook failed (exit code 255) with no output 解决方案 - belaytech - 博客园
window客户端使用SVN
TortoiseSVN教程级别指南 - 简书
提交忽略参考
SVN如何批量忽略文件和文件夹_chensheng8085497的博客-CSDN博客_svn忽略文件夹