我自己在二次开发这个博客的时候,直接在服务器上开发的,为了开发上传代码的方便使用了svn作为代码控制和代码上传的工具。我还在服务器上配好了钩子,上传代码的同时还会同步目录下的代码。

什么是SVN

svn.jpg

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

Linux下搭建svn服务器

我这只简单列出Linux下搭建svn服务器的步骤和操作

下文中出现的*号替换成其他自定义名称

通过yum命令安装

>yum -y install subversion

创建版本库目录

选择在var路径下创建版本库 这个目录的作用就是存放每次提交的代码

>mkdir /var/svn/*

创建svn版本

>svnadmin create /var/svn/*

创建成功后,进入*目录下

>cd /var/svn/*

输入ls命令,可以看到你创建的版本库的文件和文件夹

conf db format hooks locks README.txt

配置修改

进入conf

>cd /var/svn/*/conf

authz负责账号权限的管理

passwd负责账号和密码的用户名单管理

svnserve.confsvn服务器配置文件

配置authz

[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe

# [/foo/bar]
# harry = rw
# &joe = r
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[\]
username= rw

上面的代码的username=rw分别是用户名和读写权限需要多个用户就添加多条 r为读权限w为写权限

[\]代表的是根目录 意思是下面的帐号可以操作版本库根目录下的所有代码

如果需要单独的操作某个目录,需要换一行 在[]里填上对应的路径并且换行写上对应的帐号就行

配置passwd

### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
# harry = harryssecret
# sally = sallyssecret
#
username = password

上面的代码的username = password分别是用户名和密码需要多个用户就添加多条

配置svnserve.conf

[general]
anon-access = none
auth-access = write
password-db = passwd
# authz-db = authz
realm = /var/svn/*
# force-username-case = none
[sasl]
# use-sasl = true
# min-encryption = 0
# max-encryption = 256

这个文件里面有许多###开头的注释文本所以我就略去这一部分

默认都是注释的 按照我上面给出的部分修改对应参数和删除对应的注释即可

防火墙开启

如果配置好以后不能访问,一般情况下都是服务器的防火墙问题,按照如下3条命令逐一执行即可

>/sbin/iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
>/etc/init.d/iptables save
>service iptables restart

启动svn服务器

>svnserve -d -r /var/svn

启动成功后,可用ps -aux查看服务启动是否成功

客户端访问

TortoiseSVN_v1.10.0.28176 带中文包.zip

在windows客户端,安装好svn以后,SVN检出,输入地址:svn://ip地址:3690/ (iP地址为你linux的ip,为前文创建的版本库名称,3690为svn默认端口)

弹出输入用户名和密码,输入即可访问

配置钩子函数

完成上面的操作已经可以使用svn服务

如果要做到提交代码并且同步到服务器目录下,那么需要钩子函数

进入hooks

>cd /var/svn/*/hooks

创建一个文件post-commit内容如下

#!/bin/sh
export LANG=en_US.utf8
SVN_PATH=/usr/bin/svn
WEB_PATH=填你的服务器目录
$SVN_PATH update $WEB_PATH --username '帐号' --password '密码' --no-auth-cache

填入对应的参数即可

让post-commit有执行的权限,执行如下命令

chmod 777 post-commit

在服务器上需要检出的目录下检出一次项目

svn co svn://127.0.0.1/www ./

到这里算设置完成了

之后可以尝试从本地提交代码到服务器,验证钩子是否设置成功

如果重启服务器,或者修改了配置或其他操作,记得重新执行启动svn的代码

svnserve -d -r /var/svn
service svnserve start 启动服务 
service svnserve stop 停止服务 
service svnserve restart 重启服务