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=启动,如:
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 导出指定版本的文件,过滤掉.svn文件夹
svn co -r checkout指定版本的工作拷贝
svn up -r 更新当前库文件到指定版本
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
$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
#按日期顺序恢复增量备份
$sudo svnadmin load /opt/svndata/game