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到网站去覆盖原有文件(最好把原有文件备份一份)。