环境准备:
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 库文件。删除对应的即可。就会要求重新输入用户名密码
5.2 修改版本备注(centos系统下):
1. 将 hook文件夹下的pre-revprop-change.tmpl 重命名为pre-revprop-change
REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1
2. 给该文件设置可执行权限(重要) 不然修改备注会报错:
[Content]
Revprop change blocked by pre-revprop-change hook (exit code 255) with no
output.
If you want to break the lock, use the 'Check For Modifications' dialog or the repository browser.
六。让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
htpasswd(选项)(参数)
选项
-c:
创建一个加密文件;
-n:
不更新加密文件,只将加密后的用户名密码显示在屏幕上;-m:
默认采用MD5算法对密码进行加密;-d:
采用CRYPT算法对密码进行加密;-p:
不对密码进行进行加密,即明文密码;-s:
采用SHA算法对密码进行加密;-b:
在命令行中一并输入用户名和密码而不是根据提示输入密码;-D:
删除指定的用户。
参数
用户:要创建或者更新密码的用户名;
密码:用户的新密码。
实例
利用htpasswd命令添加用户
htpasswd -bc htpasswd.user admin
123456
在bin目录下生成一个 htpasswd.user 文件,用户名admin,密码:123456,默认采用MD5加密方式。
在原有密码文件中增加下一个用户
htpasswd -b htpasswd.user Jack
123456
去掉-c选项,即可在第一个用户之后添加第二个用户,依此类推。
利用htpasswd命令删除用户名和密码
htpasswd -D htpasswd.user Jack
利用htpasswd命令修改密码
htpasswd -b htpasswd.user Jack
123456