1、安装

yum install subversion


2、创建、配置svn库

创建

mkdir -p /data/svn

svnadmin create /data/svn/web


配置

cd /data/svn/web/conf/

#vim authz

[groups]
users = user1,user2 ---组名 = 组成员

[/]
@users = rw ---users组在/下的权限
* =    ---匿名无权限

#vim passwd

[users]
user1 = 123456

user2 = 123456

#vim svnserve.conf

anon-access = none
auth-access = write

password-db = passwd

authz-db = authz


3、启动svn库

svnserve -d -r /data/svn/web

-d 以进程启动

-r不对用户报告svn在服务器的具体路径,只对客户端展示一个"/"

注:以上启动后默认侦听端口为3690;如果已经存在一个默认此方式启动的svn库,则可以加参数--listen-port=<portno>启动,如:

svnserve -d -r /data/svn/web/ --listen-port=3691


4、创建模拟站点文件

[root@localhost ~]# cd /
[root@localhost /]# mkdir web
[root@localhost /]# touch web/1.txt


5、在svn服务器中导入站点文件到svn库,比windows本地客户端导入速度要快……导入时自动过滤点.svn文件夹

[root@localhost /]# svn import /web file:///data/svn/web/
svn:  Could not use external editor to fetch log message; consider setting  the $SVN_EDITOR environment variable or using the --message (-m) or  --file (-F) options
svn: None of the environment variables  SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time  configuration option was found


解决方法(一):

[root@localhost /]# vim /etc/profile

添加变量

SVN_EDITOR=/usr/bin/vim ---which vim得到此路径

找到export行,在尾部添加SVN_EDITOR(记住变量中间一定要有空格)

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC SVN_EDITOR

修改生效:

[root@localhost /]# source /etc/profile

测试是否生效

[root@localhost /]# echo $SVN_EDITOR
/usr/bin/vim ---已经生效


解决方法(二):不推荐,这样每次操作都要加上--file参数,不方便

touch /var/log/svnlog

[root@localhost /]# svn import /web file:///data/svn/web/ --file  /var/log/svnlog


重新导入站点文件到svn库

[root@localhost /]# svn import /web file:///data/svn/web/

--This line, and those below, will be ignored--

A    .



:q ---退出

Log message unchanged or not specified


(a)bort, (c)ontinue, (e)dit:


c ---继续


Adding         /web/1.txt


Committed revision 1.

(导入成功)


6、配置hooks文件

[root@localhost /]# vim /data/svn/web/hooks/post-commit

#!/bin/bash


export LANG="en_US.UTF-8"


svn update /data/webroot/shop --username user1 --password 123456

保存退出

chmod 700/data/svn/web/hooks/post-commit

注:此时/etc/sysconfig/i18n中也是 LANG="en_US.UTF-8"

post-commit一定要加执行权限,否则会提示:

Warning: post-commit hook failed (exit code 255) with no output.


7、初始化shop站点(这个第一次必须svn checkout,相当于客户端checkout)

[root@localhost ~]# svn co file:///data/svn/web/ /data/webroot/shop --username user1 --password 123456
A    /data/webroot/shop/1.txt
Checked out revision 1.


8、客户端更新svn库。可以使用tortoisesvn,这里直接使用linux中的客户端测试

[root@localhost ~]# svn co svn://localhost  ---svn co file:///data/svn/web会产生web文件夹
A    web/1.txt
Checked out revision 1.
[root@localhost ~]# cd localhost/
[root@localhost localhost]# touch 2.txt
[root@localhost localhost]# svn add 2.txt
A         2.txt
[root@localhost localhost]# svn ci

--This line, and those below, will be ignored--

A    2.txt


Log message unchanged or not specified
(a)bort, (c)ontinue, (e)dit:
c
Adding         2.txt
Transmitting file data .
Committed revision 2.

--------------------------------------

附:svn co https://172.19.9.59:8443/svn/test.com/branches/20120903 ceshi --username master--password net

注:ceshi为导出后的目录

9、查看站点目录是否更新
[root@localhost localhost]# ll /data/webroot/shop/
total 20
-rw-r--r-- 1 root root 0 Jun  2 19:46 1.txt
-rw-r--r-- 1 root root 0 Jun  2 19:51 2.txt

(成功)


========================================================================================

附:

svn export 导出最后一个版本的文件,过滤掉.svn文件夹

svn export -r <version no>导出指定版本的文件,过滤掉.svn文件夹

svn co -r <version no>checkout指定版本的工作拷贝

svn up -r <version no>更新当前库文件到指定版本

checkout指定日期版本文件:

svn checkout -r {2006-02-17}
svn checkout -r {15:30}
svn checkout -r {15:30:00.200000}
svn checkout -r {"2006-02-17 15:30"}
svn checkout -r {"2006-02-17 15:30 +0230"}
svn checkout -r {2006-02-17T15:30}
svn checkout -r {2006-02-17T15:30Z}
svn checkout -r {2006-02-17T15:30-04:00}
svn checkout -r {20060217T1530}
svn checkout -r {20060217T1530Z}
svn checkout -r {20060217T1530-0500}


svn checkout url path --username username --password password

=========================解决svn co脚本提示不能转换为UTF-8的问题

vi svn.php

<?php
$aaa = shell_exec('/usr/bin/svn co https://124.133.88.88:880/svn/test.com/ /data/webroot/shopex');
echo $aaa;
?>


vi svn.sh

#!/bin/bash
/usr/local/php/bin/php -q /data/webroot/shopex/svn.php


crontab -e

* * * * * sh /svn.sh &>/var/log/svn.log

<解决>


9、注意:如果想删除某个用户,不需要重启服务。



附:

1、启动和停止subversion
1.启动svn
# ./svnserve -d --listen-port 3690  -r /opt/svndata --log-file /opt/svndata/svn.log --pid-file /opt/svndata/svn.pid
-d以daemon方式运行
--listen-port监听端口号
-r指定目录
--log-file指定日志文件
--pid-file指定pid文件
这里需要注意一点的是,使用http协议访问,即http://ip/repos 等同于使用svn协议 svn://ip/的地址。
也就是说如果使用svn://ip/来访问,那么可以不必加上repos的这层路径。
如果使用http协议来访问,也不必执行上面这条命令
2.停止svn
# kill -9  `cat /opt/svndata/svn.pid`
2、客户端访问
1.Windows 下安装TortoiseSVN
2.Linux下#svn checkout svn://192.168.0.68:3690/game

八、备份svn存储库
#压缩备份
$sudo svnadmin dump /opt/svndata/game | gzip > /usr/local/src/svnback/game-backup.gz
#不压缩备份
$sudo svnadmin dump /opt/svndata/game > /usr/local/src/svnback/game-backup.svn

#做全备,并记录项目最新本版号:
DATE=`date +%Y%m%d-%T`
YOUNGEST=`svnlook youngest /opt/svndata/game`
echo "$YOUNGEST" > /usr/local/src/svnback/game.youngest
svnadmin dump $project > $BACKUPDIR/$project.dump
PREVYOUNGEST=`cat $BACKUPDIR/$project.youngest`
#获取项目最新的版本号,做增量备份:
NEWYOUNGEST=`svnlook youngest $project`
svnadmin dump /opt/svndata/game --revision $LASTYOUNGEST:$NEWYOUNGEST --incremental \
>/usr/local/src/svnback/game-$LASTYOUNGET-$NEWYOUNGEST.$DATE
echo "$NEWYOUNGEST" > $BACKUPDIR/$project.youngest

3、恢复svn存储库
#恢复的时候,先恢复全部备份,然后依次按照日期恢复增量备份即可。
#恢复时,svnadmin dump不能恢复原项目中conf目录下三个文件{authz  passwd  svnserve.conf},需要手动进行恢复;

#建立新的svn存储库
$sudo svnadmin create /opt/svndata/game
#确认成功与否
$sudo ls -l /opt/svndata/game

#导入存储库数据
#恢复全备
$sudo svnadmin load  /opt/svndata/game </usr/local/src/svnback/game.-backup.dump

#按日期顺序恢复增量备份
$sudo svnadmin load  /opt/svndata/game </usr/local/src/svnback/game--7.20110628-11\:28\:42