svn服务器的搭建以及利用svn hook与web根目录同步
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了svn服务器的搭建以及利用svn hook与web根目录同步相关的知识,希望对你有一定的参考价值。
svn原理图示
2.SVN服务器的搭建
1.查看是否安装svn rpm -qa | grep subversion 2.安装 yum install subversion 3.测试是否安装成功 /usr/bin/svnserve --version 如提示以下内容,说明已安装成功 -------------------------------------- svnserve,版本 1.6.11 (r934486) 编译于 Apr 11 2013,17:28:04 版权所有 (C) 2000-2009 CollabNet。 Subversion 是开放源代码软件,请参阅 http://subversion.tigris.org/ 站点。 此产品包含由 CollabNet(http://www.Collab.Net/) 开发的软件。 下列版本库后端(FS) 模块可用: * fs_base : 模块只能操作BDB版本库。 * fs_fs : 模块与文本文件(FSFS)版本库一起工作。 Cyrus SASL 认证可用。 -------------------------------------------------------------- 二、配置 1、新建一个目录:repos 可用于存储SVN所有文件 mkdir -p /opt/svndata/repos 注意,这里的目录(项目名称)路径可以更改,格式如下: mkdir -p 目录路径(如:mkdir -p /www/svn/project) 2、新建一个版本仓库(使用svnadmin create 目录仓库路径与上面新建的目录要一致) svnadmin create /opt/svndata/repos 3、修改svn版本库的配置文件 vi /opt/svndata/repos/conf/svnserve.conf #注意这个文件中的每一行与每一行之间的空格都必须删除 #每一行之前的空格也必须删除 #否则会报错。 #按以下格式内容修改,其中realm的值为项目名称,本例中即为repos。 [general] anon-access = none auth-access = write password-db = /opt/svndata/repos/conf/passwd authz-db = /opt/svndata/repos/conf/authz realm = repos 注意:对用户配置文件的修改立即生效,不必重启svn。 4、添加用户 vi /opt/svndata/repos/conf/passwd #要添加SVN用户非常简单,只需在/opt/svn/project/conf/passwd文件添加一个形如“username=pass#word”的条目就可以了。 #注意,此passwd文件中的每一行的空行也必须删除,空格也必须删除 为了测试,我添加了如下内容: [users] # harry = harryssecret # sally = sallyssecret pm = pm_pw server_group = server_pw client_group = client_pw test_group = test_pw 5、修改用户访问策略 vi /opt/svndata/repos/conf/authz 记录用户的访问策略,以下是参考: [groups] project_p = pm project_s = server_group project_c = client_group project_t = test_group [project:/] @project_p = rw * = [project:/server] @project_p = rw @project_s = rw * = [project:/client] @project_p = rw @project_c = rw * = [project:/doc] @project_p = rw @project_s = rw @project_c = rw @project_t = rw * = 以上信息表示,只有pm有根目录的读写权,server_group能访问server目录,client_group能访问client目录,所有人都可以访问doc目录。 当然,以上是比较复杂的权限控制,如果只是测试,可以简单些。建立一个用户组,把所有的用户都放到一个用户组,如下: [groups] admin = pm,server_group,client_group,test_group [/] @admin = rw * = 匿名是否能访问关键是看“*”的配置。“* =”就是没有任何权限。 关于权限的控制,本文不详情叙述,大家可以去咨询度娘。 5、启动svn服务 svnserve -d --listen-port 3690 -r /opt/svndata/repos (以root用户在运行) 开机启动: #echo ‘svnserve -d --listen-port 3690 -r /opt/svndata/repos‘ >> /etc/rc.d/rc.local 假如有多个项目同时在开发的话,可以通过不同端口可以开启多个SVN服务,使用TortoiseSVN操作时记得加上端口号。 #停止SVN服务 killall svnserve 6、测试svn服务器 进入网站根目录 cd /www/web/repos/public_html svn co svn://127.0.0.1:3690 /www/web/repos/public_html --username pm --password pm_pw svn import . file:///data/svndata/peel.haochedai.com -m "import" 会出现以下认证的提示 ----------------------------------------------------------------------- 注意! 你的密码,对于认证域: repos 只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion 可以保存加密后的密码。请参阅文档以获得详细信息。 你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”, 来避免再次出现此警告。 ----------------------------------------------------------------------- 保存未加密的密码(yes/no)? 输入“yes” 回车,因为版本仓库还没有添加任何文件,所以取出版本为0,如下: 取出版本 0。 三、配置post-commit,实现自动同步svn版本库文件到web目录 为了可以在修改完代码提交到SVN服务器后,WEB服务器直接同步.需要配置SVN的钩子,进入hooks目录, cd /opt/svndata/repos/hooks ls 可以看到有一个post-commit.tmpl文件,这是一个模板文件,复制一份放在此目录下,命名为post-commit,并将其用户组设为www,并设置为可执行: cp post-commit.tmpl post-commit chown www:www post-commit chmod +x post-commit 这样就有了访问www目录的权限。 里面原有的代码全部注释掉.这里可以执行shell命令,每次commit完成后都会调用此文件. 文件内容参考以下: vi post-commit #!/bin/sh export.UTF-8 REPOS="$1" REV="$2" SVN_PATH=/usr/bin/svn WEB_PATH=/www/web/repos/public_html LOG_PATH=/tmp/svn_update.log #此行已注释 #/usr/bin/svn update --username user --password password $WEB_PATH --no-auth-cache echo "\n\n\n##########开始提交 " `date "+%Y-%m-%d %H:%M:%S"` ‘##################‘ >>$LOG_PATH echo `whoami`,$REPOS,$REV >> $LOG_PATH #注意将此行user和password改为你具体的user和password $SVN_PATH update --username user --password password $WEB_PATH --no-auth-cache >> $LOG_PATH chown -R www:www $WEB_PATH ======================================================================================== 说明: 1、#!/bin/sh 说明是执行shell命令 /*设定环境变量,如果没有设定可能会出现update报错*/ 2、export.UTF-8 是为了解决svn post commit 中文乱码。 如果你是GBK编码可能会提示:Error output could not be translated from the native locale to UTF-8 这是客户端和服务器编码的问题,默认是utf-8,可尝试设置export.GBK或者export.UTF-8 #执行更新操作 3、svn update –username 你版本库的用户名 –password 用户名的密码 svn://你的IP地址:端口 /web/web/repos/public_html 4、chown -R www:www $WEB_PATH 更改文件夹属主为适合Web Server的 里面原有的代码全部注释掉.这里可以执行shell命令,每次commit完成后都会调用此文件。 ls * | file - convmv -f gbk -t utf-8 -r –notest convmv -f latin1 -t utf-8 * --notest
接下来在windows客户端安装svn客户端
上传文件测试,我这里上传了svn.ppt
可以发现,上传的文件已经被传至网站根目录了。
本文出自 “清晰明了” 博客,请务必保留此出处http://duanyexuanmu.blog.51cto.com/1010786/1752888
以上是关于svn服务器的搭建以及利用svn hook与web根目录同步的主要内容,如果未能解决你的问题,请参考以下文章