环境准备:
1. centos
一. 创建仓库
svnadmin create /svn/my.test.com
二. 配置仓库
2.1
svnserve.conf文件
[general] anon-access = none auth-access = write password-db = passwd authz-db = authz realm = /svn # force-username-case = none [sasl] # use-sasl = true
authz文件 (重要)
[groups] phpgroup=admin,xiaoming,zhao,zhangsan,lisi,xiaomingwu apigroup=zhao admingroup=zhangsan webgroup=lisi [/] admin=rw *=r [/App] admin=rw *=r [/App/Api] @apigroup=rw [/App/Home] @admingroup=rw @webgroup=rw [/App/Mobile] @admingroup=rw @webgroup=rw [/App/Manage] @admingroup=rw @webgroup=rw [/avatar] admin=rw *=r [Data] admin=rw *=r [/Include] admin=rw *=r [/Public] admin=rw @webgroup=rw *=r [/uploads] admin=rw *=r
分了三个小组:api组,后台管理组, web前段开发组,用thinphp 框架目录结构做了相关的目录权限划分;
passwd文件
[users] admin=sally xiaoming=xiaoming zhao=zhao zhangsan=zhangsan zhuwen=zhuwen xiaomingwu=xiaomingwu
三. 运行
svnserve -d -r /svn/my.test.com --listen-port 20003
回车后这时就建立了svn://你的ip地址:20003链接了。
我用TortoiseSVN 工具 将项目checkout 到 D:\workspace_php\test目录下
四. 本地与测试服务器同步
4.1 centos 下使用命令迁出到 项目目录下
svn co svn://路径(目录或文件的全路径) [本地目录全路径] --username 用户名 --password 密码
4.2 修改svn配置文件hooks/post-commit文件
#!/bin/sh WEBSITE="/data/wwwroot/my.test.com" export LANG=zh_CN.UTF-8 #echo "code update at `date " +%Y-%m-%d %H:%M"`" >> /svn/temp.log svn update --username admin --password sally $WEBSITE
4.3 post-commit 增加可执行权限
配置web服务器能http://my.test.com ,目录这里为/data/wwwroot/my.test.com
在本地增加修改项目文件, http://my.test.com 也会跟着变。除非有冲突出现。
五。常见问题
5.1 SVN 重新输入SVN用户名密码:
%appdata% /Subversion\auth\svn.simple 下有对应的svn 库文件。删除对应的即可。就会要求重新输入用户名密码
六。让SVN支持http协议
假设我们已经能通过 svn://yourip:20003 能访问了,如何支持http协议呢?
1. 下载apache
2. 修改配置文件
机器已经运行了nginx,为避免80端口冲突 并且已经将20000-200500 之间的端口不会被防火墙拦截。所以我将apache端口设为20000
我发现httpd.conf文件 会默认访问conf.d 文件夹下面的conf文件 和conf.modules.d文件夹下的.conf
conf.modules.d 文件夹已经 存在10-subversion.conf
内容为:
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so LoadModule dontdothat_module modules/mod_dontdothat.so
所以在conf.d目录下创建的 subversion.conf内容如下:
重点说下这个配置文件,如果你访问svn的http协议 出现空白,很有可能和这个配置文件有关系。
/svn存在product_design 和 project2 两个版本库,
单独访问 某个项目 用如下配置 (Location后面的路径和SVNPath 一致),http://ip/svn/prudct_design 可以访问 ; 访问https://ip/svn/project2 不可以访问
<Location /svn/product_design> DAV svn #SVNparentPath /svn SVNPath /svn/product_design #SVNListParentPath on AuthType Basic Satisfy Any Authname "pd" AuthUserFile /svn/product_design/conf/passwd_http AuthzSVNAccessFile /svn/product_design/conf/authz Require valid-user </Location>
<Location /svn> // 访问http://ip/svn 出现svn - Revision 几个字后其余一片空白 DAV svn #SVNparentPath /svn SVNPath /svn/product_design #SVNListParentPath on AuthType Basic Satisfy Any Authname "pd" AuthUserFile /svn/product_design/conf/passwd_http AuthzSVNAccessFile /svn/product_design/conf/authz Require valid-user </Location>
<Location /product_group> DAV svn #SVNparentPath /svn SVNPath /svn/product_design #SVNListParentPath on AuthType Basic Satisfy Any Authname "pd" AuthUserFile /svn/product_design/conf/passwd_http AuthzSVNAccessFile /svn/product_design/conf/authz Require valid-user </Location>
<Location /svn> // http://ip/svn/product_design 可以访问 http://ip/svn/project2也可以访问 DAV svn SVNparentPath /svn #SVNPath /svn/product_design #SVNListParentPath on AuthType Basic Satisfy Any Authname "pd" AuthUserFile /svn/product_design/conf/passwd_http AuthzSVNAccessFile /svn/product_design/conf/authz Require valid-user </Location>相关链接: SVNPath 与 SVNParentPath区别http://blog.chinaunix.net/uid-29063464-id-4147612.html
passwd_http 使用 htpasswd 命令生成
重启 apache:/usr/sbin/apachectl restart