企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Centos下svn的安装配置 ## 检查已安装版本 ~~~ #检查是否安装了低版本的SVN rpm -qa subversion #卸载旧版本SVN [root@localhost modules]# yum remove subversion ~~~ ## 安装SVN ~~~ yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql ~~~ ## 确认已安装了SVN模块 ~~~ cd /etc/httpd/modules ls | grep svn #会返回以下内容 #mod_authz_svn.so #mod_dav_svn.so ~~~ ## 验证安装 检验已经安装的SVN版本信息 ~~~svnserve --version~~~ ## 创建代码库 SVN软件安装完成后还需要建立SVN库 ~~~ mkdir -p /svn/web svnadmin create /svn/web ~~~ 执行上面的命令后,自动建立web库,查看/svn/web 文件夹发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。 ## 配置代码库-设置SVN用户名及密码 进入上面生成的文件夹conf下,进行配置 ~~~ cd /svn/svn/conf #用户密码passwd配置 规则如下username=password ~~~ ## 权限控制-authz 这里是设置用户访问权限、访问目录。 ~~~ vi authz #设置代表根目录下所有的资源 #rw是读写权限 ~~~ [/] aoxiang=rw ~~~ ## 服务svnserve.conf配置 ~~~ vi svnserve.conf #追加以下内容 [general] #匿名访问的权限,可以是read,write,none,默认为read anon-access=none #使授权用户有写权限 auth-access=write #密码数据库的路径 password-db=passwd #访问控制文件 authz-db=authz #认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字 realm=/svn/web ~~~ ## 配置防火墙端口 ~~~ vi /etc/sysconfig/iptables #添加以下内容: -A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT #保存后重启防火墙 service iptables restart ~~~ ## 启动SVN ~~~ svnserve -d -r /svn/web ~~~ ## 查看SVN进程 ~~~ ps -ef|grep svn|grep -v grep #返回一下信息: #root 12538 1 0 14:40 ? 00:00:00 svnserve -d -r /opt/svn/repositories ~~~ ## 检测SVN 端口 ~~~ netstat -ln |grep 3690 #返回一下信息: #tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN ~~~ ## 停止重启SVN ~~~ killall svnserve //停止 svnserve -d -r /svn/web // 启动 ~~~ # 使用钩子 ## checkout代码的文件 在web目录下创建网站对应的文件夹,我这里直接给文件夹命名为svn,并且checkout ~~~ mkdir /home/wwwroot/svn cd /home/wwwroot/svn svn checkout svn://127.0.0.1 ./ ~~~ 完成以后目录下会多了.svn的隐藏文件夹 ## 创建钩子 在创建好svn project之后会有如下目录结构。我们的钩子就存放在hooks里面。 其中版本库里面会存在一个hooks文件的文件夹啊 我们需要做下面步骤: 代码如下: ~~~ cd hooks cp post-commit.tmpl post-commit #拷贝一个钩子模板 chmod 777 post-commit #赋予可执行权限 vim post-commit ~~~ ## 编辑钩子文件 找到/svn/svntest/hooks/post-commit, 进入到post-commit编辑状态后,我们最好把里面的内容都给注释。然后敲入以下代码: ### 版本1://此版本主要防止文件非常多导致钩子反应慢 ~~~ SVN=/usr/bin/svn #svn执行文件所在的文件夹 WEB=/home/wwwroot/svn #svn项目所在目录 LOG_PATH=/svn/svntest/svn_hook.log #我们定义的一个log文件 echo "------------Start Commit -----------" >> $LOG_PATH echo "Time:"`date '+%Y-%m-%d %T'`>>$LOG_PATH #这里是在日志中写入执行的时间 cd $WEB for dir in 'svnlook dirs-changed /svn/svntest' #查找有修改过的文件,并将修改过的内容部署到web目录 do #下面一句执行update命令 $SVN update -N $WEB --username "aoxiang" --password "aoxiang" >> $LOG_PATH done echo "------------Commit End---------------" >>$LOG_PATH ~~~ update 所含的子命令 ~~~ --revision(-r)REV --non-recursive(-N) --quiet(-q) --no-ignore --incremental --diff3-cmdCMD --usernameUSER --passwordPASS --no-auth-cache --non-interactive --config-dirDIR --ignore-externals ~~~ ### 版本2:此版本控制较少文件版本 ~~~ /usr/local/bin/svn update /home/wwwroot/svn --username test --password test ~~~