企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
一、安装 * * * * * ~~~ yum install subversion -y ~~~ 查看svn的安装位置 ~~~ rpm -ql subversion ~~~ 查看svn使用帮助 ~~~ svn --help ~~~ `二、使用` * * * * * 创建svn版本库目录 ~~~ mkdir -p /var/svn/svnrepos ~~~ 创建版本库 ~~~ svnadmin create /var/svn/svnrepos ~~~ 执行了这个命令之后会在`/var/svn/svnrepos`目录下生成如下这些文件 ![2015-05-16/555699b554f2c](http://box.kancloud.cn/2015-05-16_555699b554f2c.png) 进入conf目录(该svn版本库配置文件) ~~~ authz文件是权限控制文件 passwd是帐号密码文件 svnserve.conf SVN服务配置文件 ~~~ 设置帐号密码 ~~~ vi passwd ~~~ 在[users]块中添加用户和密码,格式:帐号=密码,如lisi=123456。可以根据需要,添加多个账户,一个账户占据一行 设置权限 ~~~ vi authz ~~~ 在末尾添加如下代码: ~~~ [/] lisi=rw wangwu=r ~~~ 意思是版本库的根目录,lisi对其有读写权限,wangwu只有读权限。 修改svnserve.conf文件 ~~~ vi svnserve.conf ~~~ 打开下面的几个注释: ~~~ anon-access = none #匿名用户不可读写,可设置为write,read,none auth-access = write #授权用户可写 password-db = passwd #使用哪个文件作为账号文件 authz-db = authz #使用哪个文件作为权限文件 realm = /var/svn/svnrepos # 认证空间名,版本库所在目录 ~~~ 注意:打开注释时,同时要删除#后面的空格,否则会报错 启动svn版本库 ~~~ svnserve -d -r /var/svn/svnrepos #单版本启动 ~~~ -d表示后台运行,-r表示把此目录作为根目录 在windows上测试 新建一个测试文件夹,在该文件夹下右键选择 SVN checkout如下图(要事先安装TortoiseSVN): ![2015-05-16/55569db5f3954](http://box.kancloud.cn/2015-05-16_55569db5f3954.jpg) 填写SVN的地址,如下图: ![2015-05-16/55569dea5dde2](http://box.kancloud.cn/2015-05-16_55569dea5dde2.jpg) 输入密码,如下图: ![2015-05-16/5556a220cc744](http://box.kancloud.cn/2015-05-16_5556a220cc744.png) `三、部署项目` 我们希望更新的代码能实时同步到项目,操作如下: 假设项目目录为/var/www/html,确保该目录为空目录,把版本库检出到该目录 ~~~ svn checkout svn://localhost/ /var/www/html ~~~ 自动更新 ~~~ vim /var/svn/svnrepos/hooks/post-commit ~~~ 添加以下代码 ~~~ #!/bin/sh #设置一些变量 SVN=/usr/bin/svn WEB=/var/www/html #要更新的目录 export LANG=en_US.UTF-8 $SVN update $WEB --username lisi--password 123456 ~~~ 注意:在新的版本中,文件最后会有这一段,这是发送邮件的,一般我们不需要,那就注释掉 `mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf` 赋予可执行权限 ~~~ chmod 777 /var/svn/svnrepos/hooks/post-commit ~~~ 注意,如果同时多用户更新的话,有可能会出现错误提示信息,修改`/root/.subversion/servers`中的相关内容 ~~~ store-passwords = no store-plaintext-passwords = no ~~~ 安装完毕,这样当用户lisi更新版本库的时候,就会自动部署到项目目录中 `四、多版本配置` 上面只是实现了单版本启动,但实际中不能满足需要。 创建另一个版本库`svnrepos1` ~~~ mkdir -p /var/svn/svnrepos1 svnadmin create /var/svn/svnrepos1 ~~~ 把`svnrepos`或`svnrepos1`下的`conf`中的 `authz`和`passwd`拷贝到`/var/svn`中。`passwd`的配置和单版本启动的一样,这里不详述。 编辑`authz` ~~~ vim authz ~~~ 在下面添加以下代码 ~~~ [svnrepos:/] lisi=rw wangwu=r [svnrepos1:/] lisi=rw wangwu=rw ~~~ 然后修改各个版本库的`svnserve.conf` ~~~ anon-access = none auth-access = write password-db = ../../passwd #相对位置,就是/var/svn/passwd authz-db = ../../authz #相对位置,就是/var/svn/authz realm = /var/svn ~~~ 启动svn版本库 ~~~ svnserve -d -r /var/svn #多版本启动,这里和单版本的不同就是-r的根目录改变了 ~~~ 检出版本库 ~~~ svn://svn服务器地址/svnrepos svn://svn服务器地址/svnrepos1 ~~~ 至此多版本就配置好了。 注意:如果之前启动了svn,要先停止后再启动 `五、后续工作` 开机自动启动svn 在更高版本的centos中,/etc/rc.d/rc.local文件的权限被降低了,没有执行权限,需要给它添加可执行权限 ``` chmod +x /etc/rc.d/rc.local ``` 然后 ~~~ vi /etc/rc.local #打开自启动文件添加 /usr/bin/svnserve -d -r /var/svn/svnrepos/ #单版本启动 /usr/bin/svnserve -d -r /var/svn/ #多版本启动 ~~~ 停止svn服务 ~~~ netstat -ntlp #查看svnserve进程的pid kill -9 pid ~~~ 在mac下用phpstorm自带的svn,检测出版本库后新增文件,但没提交更新到服务器上,主要是因为phpstorm的svn没有把这文件添加到vcs里