centos7安装配置svn

centos下直接用yum安装svn
php

yum install subversion

检查svn版本linux

svnserve --version

1、创建版本库vim

建立svn数据目录(subversion默认是把/var/svn做为数据根目录的,开机启动默认也是从这里)centos

mkdir -p /var/svn

建立版本库bash

svnadmin create /var/svn/test

若是删除版本库服务器

rm -rf /var/svn/test


2、导入导出工程项目ide

当咱们拿到程序给咱们的代码以后,咱们就须要在svn服务器上将工程导入仓库,假如咱们的网站是放在/var/www/test目录下
svn

svn import /var/www/test file:///var/svn/test -m "test"

-m后是咱们取的工程名
post

咱们须要从仓库导出一份代码,这样才能实如今svn服务器上修改代码,update到运行目录网站

svn checkout svn://localhost:3777/test /var/www/final

其中/var/www/final是咱们最后部署上线的目录


3、配置svn配置文件

每一个版本库建立以后都会生成svnserve.conf主要配置文件

vim /var/svn/test/conf/svnserve.conf
[general]
anon-access = none                    #控制非鉴权用户访问版本库的权限
auth-access = write                   #控制鉴权用户访问版本库的权限
password-db = passwd                  #指定用户名口令文件名
authz-db = authz                      #指定权限配置文件名
realm = test                          #指定版本库的认证域,即在登陆时提示的认证域名称


4、编辑svn用户配置文件

vim /var/svn/test/conf/passwd
[users]
admin = admin                #用户,密码
fuhd = fuhd                #用户,密码
test = test                #用户,密码


5、编辑svn权限控制配置文件

vim /var/svn/test/conf/authz
[groups]
admin = admin         #admin为用户组,等号以后的admin为用户
test = fuhd,test

[test:/]                #表示根目录(/var/svn/test),test: 对应前面配置的realm = test
@admin = rw            #表示admin组对根目录有读写权限,r为读,w为写

[test:/test]         #表示test目录(/var/svn/test/test)
@test = rw                #表示test组对test目录有读写权限


6、利用钩子hooks自动更新提交代码到网站目录

须要编辑

vim /var/svn/test/hooks/post-commit
#!/bin/sh
REPOS="$1"
REV="$2"
export      

SVN_PATH=/usr/bin/svn
WEB_PATH=/data/www/final
SVN_USER=test                                
SVN_PW=test
LOG_PATH=/var/log/svn.log

echo `date "+%Y-%m-%d %H:%M:%S"` >>$LOG_PATH
echo `whoami`,$REPOS,$REV >>$LOG_PATH

$SVN_PATH update $WEB_PATH --username $SVN_USER --password $SVN_PW --no-auth-cache >>$LOG_PATH || exit 1

chown -R www:www $WEB_PATH

exit 0

保存退出后

chmod +x post-commit

这样每次提交后都会更新到咱们的网站目录。

其余hooks的做用以下

post-commit

在提交完成,成功建立版本以后执行该钩子,提交已经完成,不可更改,所以本脚本的返回值被忽略。

post-lock

对文件进行加锁操做以后执行该脚本

post-revprop-change

在修改 revision 属性以后,执行该脚本。由于修改稿已经完成,不可更改,所以本脚本的返回值被忽略(不过实际上的实现彷佛是该脚本的正确执行与否影响属性修改)

post-unlock

对文件进行解锁操做以后执行该脚本

pre-commit

在 Subversion transaction 完毕以后,在提交以前,执行该脚本

pre-lock

对文件进行加锁操做以前执行该脚本

pre-revprop-change

在修改 revision 属性以前,执行该脚本

pre-unlock

对文件进行解锁操做以前执行该脚本

start-commit

在客户端尚未向服务器提交数据以前,即尚未创建 Subversion transaction(缩写为 txn) 以前,执行执行该脚本


7、启动,查看和中止SVN服务

启动SVN服务

# -d:守护进程  -r:svn数据根目录   --listen-port:监听端口
svnserve -dr /var/svn/test --listen-port 3690

查看SVN服务

ps aux|grep svnserve               #默认端口为:3690

注意打开防火墙和关闭selinux

vim /etc/sysconfig/selinux
SELINUX = disable               #值修改成disable


遇到的问题

import的时候提示错误

svn: E000022: Error converting entry in directory '/var/www/test/images' to UTF-8
svn: E000022: Can't convert string from native encoding to 'UTF-8':

问题就是环境变量的编码设置的很差,解决办法

vim ~/.bashrc

加上

export LC_ALL=en_US.UTF-8
export.UTF-8
export LANGUAGE=en_US.UTF-8
source ~/.bashrc


update的时候提示错误

post-commit hook failed (exit code 1) with output:
Conflict discovered in '/data/www/index.php',
Select: (p) postpone, (df) diff-ful, (e) edit.
     (mc) mine-conflict, (tc) theirs-conflict,
     (s) show all options: svn: E070014: Can't read stdin: End of file found

因为更新的问题,网站和svn里的文件不一致,从svn checkout一份文件覆盖到网站里面去

svn checkout --depth=empty file:///svn/www/ www
cd www
svn update index.php

其中,www为checkout后的文件夹名,本身能够随意指定,执行svn checkout命令后,会获得一个名为www的空目录,里面什么都没有,而实现这一效果的就是参数中指定的depth=empty。下一步就是进入刚刚checkout下来的www目录,执行update操做,想取哪一个文件就checkout哪一个文件就行了。最后把不一致的文件copy到网站去覆盖原有文件(最好把原有文件备份一份)。

相关文章
相关标签/搜索