Alan Hou的个人博客

SVN学习笔记

安装

yum -y install subversion

通过rpm -qa subversion可确认是否已安装
小帖士:如需保留yum安装包的话只需修改/etc/yum.conf中的keepcache的值即可

#修改
sed -i 's#keepcache=1#keepcache=0#g' /etc/yum.conf
#查看
grep keepcache /etc/yum.conf

配置并启动

创建两个目录,分别用于存储数据和用户、密码

mkdir -p /application/svndata
mkdir -p / application/svnpasswd

使用svnserve来启动SVN服务,相关参数可通过svnserve –help来查看用途

svnserve -d -r /application/svndata/
#查看服务是否启动
ps -ef | grep svn
#通过端口方式来查看服务是否启动
netstat -lnpt | grep 3690
#或者(CentOS 6默认未安装)
lsof -i :3690

创建版本库

创建版本库使用命令svnadmin

svnadmin create /application/svndata/sadoc

通过tree /application/svndata可以查看到版本库基本的目录结构

/application/svndata/
└── sadoc
    ├── conf
    │   ├── authz
    │   ├── passwd
    │   └── svnserve.conf
    ├── db
    │   ├── current
    │   ├── format
    │   ├── fsfs.conf
    │   ├── fs-type
    │   ├── min-unpacked-rev
    │   ├── rep-cache.db
    │   ├── revprops
    │   │   └── 0
    │   │       └── 0
    │   ├── revs
    │   │   └── 0
    │   │       └── 0
    │   ├── transactions
    │   ├── txn-current
    │   ├── txn-current-lock
    │   ├── txn-protorevs
    │   ├── uuid
    │   └── write-lock
    ├── format
    ├── hooks
    │   ├── post-commit.tmpl
    │   ├── post-lock.tmpl
    │   ├── post-revprop-change.tmpl
    │   ├── post-unlock.tmpl
    │   ├── pre-commit.tmpl
    │   ├── pre-lock.tmpl
    │   ├── pre-revprop-change.tmpl
    │   ├── pre-unlock.tmpl
    │   └── start-commit.tmpl
    ├── locks
    │   ├── db.lock
    │   └── db-logs.lock
    └── README.txt

修改配置文件conf/svnserve.conf(别忘了先做好备份哦)

#修改第12,13行
anon-access = none
auth-access = write
#第20行
password-db = /application/svpasswd/passwd
#第27行
authz-db = /application/svnpasswd/authz

通过diff指令对比备份文件可查看修改的内容

diff svnserve.conf.bak svnserve.conf
12,13c12,13
< # anon-access = read
< # auth-access = write --- > anon-access = none
> auth-access = write
20c20
< # password-db = passwd --- > password-db = /application/svnpasswd/passwd
27c27
< # authz-db = authz --- > authz-db = /application/svnpasswd/authz

修改完配置文件需重启SVN使配置文件生效

pkill svnserve
svnserve -d -r /application/svndata/

使用了pid file的话可以通过如下方法重启

kill -USR1 <code>cat /application/svndata/svn.pid</code>
svnserve -d -r /application/svndata --pid-file=/application/svndata/svn.pid

接下来将conf文件夹下的passwd和authz文件拷贝到/application/svnpasswd目录下

cp passwd authz /application/svnpasswd/

注:为保持安全性可将拷贝到/application/svnpasswd/下的这两个文件设置700的权限

在passwd中配置用户名和密码,按照 user = password一行一个用户的方式添加即可
然后在authz文件中定义组设置权限:
基本格式

[<版本库>:/项目/目录]
@<用户组名> = 权限
<用户名> = 权限

#定义组-[groups]下面
sagroup = alan, david
[sadoc:/]
@sagroup = r
alan = rw

接下来就需要在本地下载SVN客户端,Windows下一般用TortoiseSVN (常用操作有SVN Update(首次为Checkout)和SVN Commit,缺省目录%APPDATA%\Subversion\auth)

Linux下客户端的操作方法

svn co svn://*.*.*.*/sadoc /local/dir/ --username=alan --password=...
svn add filename
snv ci -m "description..."
svn import /local/dir/ svn://*.*.*.*/sadoc -m "description..."

Linux下修改SVN IP地址(通过svn info可查看详细信息)

svn switch --relocate 原svn地址 新svn地址

SVN下可能过钩子来在提交前、提交后进行一些操作,默认在hooks文件夹下有如下模板,去除后面的.tmpl即可使用
post-commit.tmpl
post-lock.tmpl
post-revprop-change.tmpl
post-unlock.tmpl
pre-commit.tmpl
pre-lock.tmpl
pre-revprop-change.tmpl
pre-unlock.tmpl
start-commit.tmpl

注:从Windows上传的文件转换文本格式用dos2unix指令,钩子文件要加执行权限

以下是一个通过钩子来传送文件的简单示例

REPOS="$1"
REV="$2"
#encoding
export LC_CTYPE="en_US.UTF-8"
export LC_ALL=
#log pth
LOGPATH-"/app/log"
[ ! -d ${LOGPATH} ] && mkdir ${LOGPATH} -p
#update content with svn
SVN update --username alan -- password alanhou /data/www

if [ $? -eq 0 ]
        then
        /usr/bin/rsync -az --delete /data/www /tmp/
fi

其它:

branch, tag, trunk

svnlook

线上更新代码:先上传到临时目录,再执行mv或者使用ln软链接

Jira, Mantis

退出移动版