SVN作为新一代代码版本管理工具,有很多优点,管理方便,逻辑明确,安全性高,代码一致性高。SVN数据存储有两种方式,BDB(事务安全表类型)和FSFS(一种不需要数据库的存储系统),为了避免在服务器连接中断时锁住数据,FSFS是一种更安全也更多人使用的方式。SVN的运行方式也有两种,一种是独立服务器,另一种是借助apache服务,各有利弊,下面就介绍一下这两种方式各自的部署步骤。
1、作为独立服务器运行:
①安装svn,使用本地yum源安装,操作系统镜像里自带的就有,yum install
svn,具体步骤请参考http://ailurus.blog.51cto.com/4814469/1168336;
②创建版本库:
mkdir /svn/project //创建版本库所在文件夹
svnadmin create --fs-type fsfs /svn/project/first
//创建版本库,如果需要使用bdb方式存储,则将fsfs改成bdb即可
③初始化版本库,即导入文件到版本库中:
svn import /home/software file:///svn/project/first --message "初始化版本"
//将home文件夹的文件导入版本库
svn list --verbose file:///svn/project/first //查看导入的文件
④启动svn服务,svn服务默认端口为3690,可以使用“netstat -ntlp”命令查看服务启动是否成功:
svnserve -d -r /svn/project
⑤修改策略控制文件,vi authz,如果以后要添加用户,就将用户名加在相应的用户组(admin或者user)后面即可:
### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to:
### - a single user,
### - a group of users defined in a special [groups] section,
### - an alias defined in a special [aliases] section,
### - all authenticated users, using the '$authenticated' token,
### - only anonymous users, using the '$anonymous' token,
### - anyone, using the '*' wildcard.
###
### A match can be inverted by prefixing the rule with '~'. Rules can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').
[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
admin=first,second,third //用户组admin包含的成员
user=anyone //用户组user包含的成员
# [/foo/bar]
# harry = rw
# &joe = r
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[/]
@admin=rw //用户组admin内成员拥有读写权限
@user=r //用户组user内成员拥有读权限
⑥添加svn访问用户,vi passwd,为authz里分配的用户设置密码,等号左边为用户名,等号右边是密码;
### 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
first=first
second=second
third=third
anyone=anyone
⑦修改svn读取的权限策略文件,vi /svn/project/first/conf/svnserve.conf:
anon-access = none //不允许匿名用户读写
auth-access = write
password-db = passwd //svn读取的passwd文件
authz-db = authz //svn读取的权限控制文件
⑧安装svn客户端,就可以使用客户端通过如下的url就可以访问了:
svn://IP地址/svn/project/first
2、借助apache服务器,通过web端访问svn:
①给apache服务器安装两个svn插件,这两个插件同样可以使用yum安装:
yum install mod_dav_svn //使subversion与dav模块通信的功能
yum install mod_authz_svn //实现权限控制功能
②使用命令“httpd -M”可以查看是否加载这两个模块,如加载,则有如下回应:
Loaded Modules:
core_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
auth_basic_module (shared)
auth_digest_module (shared)
authn_file_module (shared)
authn_alias_module (shared)
authn_anon_module (shared)
authn_dbm_module (shared)
authn_default_module (shared)
authz_host_module (shared)
authz_user_module (shared)
authz_owner_module (shared)
authz_groupfile_module (shared)
authz_dbm_module (shared)
authz_default_module (shared)
ldap_module (shared)
authnz_ldap_module (shared)
include_module (shared)
log_config_module (shared)
logio_module (shared)
env_module (shared)
ext_filter_module (shared)
mime_magic_module (shared)
expires_module (shared)
deflate_module (shared)
headers_module (shared)
usertrack_module (shared)
setenvif_module (shared)
mime_module (shared)
dav_module (shared)
status_module (shared)
autoindex_module (shared)
info_module (shared)
dav_fs_module (shared)
vhost_alias_module (shared)
negotiation_module (shared)
dir_module (shared)
actions_module (shared)
speling_module (shared)
userdir_module (shared)
alias_module (shared)
substitute_module (shared)
rewrite_module (shared)
proxy_module (shared)
proxy_balancer_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
proxy_ajp_module (shared)
proxy_connect_module (shared)
cache_module (shared)
suexec_module (shared)
disk_cache_module (shared)
cgi_module (shared)
version_module (shared)
authz_ldap_module (shared)
dav_svn_module (shared)
authz_svn_module (shared)
Syntax OK
③编辑apache服务配置文件vi /etc/httpd/conf/httpd.conf,加入下面几行:
DAV svn
SVNPath /svn/project/zbw
AuthzSVNAccessFile /etc/httpd/conf.d/authz
//apache服务器读取的权限策略文件
AuthType Basic
AuthName "Project"
AuthUserFile /etc/httpd/conf.d/passwd
//apache服务器读取的密码存储文件
Require valid-user
④编辑文件authz放在文件夹/etc/httpd/conf.d中,文件格式同文章上面的那个authz文件,编辑文件passwd放在文件夹/etc/httpd/conf.d中,使用如下命令生成用户名和密码:
htpasswd -c /svn/project/first admin
//命令为htpasswd,-c为参数,/svn/project/first为访问的版本库,admin为用户名
然后重复输入你想设置的密码就可以自动存储在文件passwd中,默认为md5存储。
⑤重启apache服务,就可以在网页端使用刚才设置的用户名密码访问了,网址为
centos svn 建版本库
1.首先讲一下svn的命令
主要有三个命令需要知道,一个是svnadmin,它主要是负责建立repository(就是你需要控制版本的项目的根文件夹),在它下面可以建立各个文件夹存储相关文件,像/doc
、/source等,如果你有多个项目需要管理,建议你建立一个总的目录,这样便于管理
svnadmin create /srv/svn/repos
然后,可以通过svn命令添加各个不同的项目(下面会说到)
还有一个命令是svn,它负责跟你的版本库打交道,包括check in和check out文件,创建文件夹等。
svn command [options] svn://host/repository
创建一个文件夹
svn mkdir -m "document for project" svn://host/project/doc
这样,便在你的project下创建了doc文件夹,你可以向它里面上传文件了
还有一个命令svnserve,负责启动svn,一般用法
svnserve -d -r /srv/svn/repos
注意:后面的路径必须是一个svnadmin创建的仓库路径,否则会报错:Not a repository
2.配置
如果你想通过http能够访问到你的repository,你需要将svn和你的apache集成,这个做起来很简单
首先向apache添加相关模块
a2enmod dav
a2enmod dav_svn
然后在apache配置文件/etc/apache2/conf.d/subversion.conf中添加
Alias /repos
"/srv/svn/html"
Options +Indexes +Multiviews
-FollowSymLinks
IndexOptions FancyIndexing
\
ScanHTMLTitles \
NameWidth=* \
DescriptionWidth=*
\
SuppressLastModified \
SuppressSize
order allow,deny
allow from all
# project repository files for project2
DAV svn
SVNPath
/srv/svn/repos/project2
# Limit write permission to list of valid users.
# Require SSL
connection for password protection.
# SSLRequireSSL
AuthType Basic
AuthName "Authorization for
project2 required"
AuthUserFile
/srv/svn/user_access/project2_passwdfile
Require
valid-user
需要注意一下路径,SVNPath /srv/svn/repos/project2 改成自己的,还有AuthUserFile
/srv/svn/user_access/project2_passwdfile密码文件。这样就完成了svn和apache的集成。
接下来配置访问方式
按照下面的假设配置,读权限可以设置为所有人可读,写权限需要验证。
修改/srv/svn/repos该仓库下的conf下的svnserve.conf文件,
修改为:
anon=read
auth=write
password-db=passwd
**注意每一行的前面都不能留空格,否则在执行svn命令的时候会出问题:svn:svn://host/ svnserve.conf
Option expeted
接下来修改passwd文件,username=password的形式
3.启动服务
使用命令svnserve启动服务
svnserve -d -r /srv/svn/repos
也可以加端口号 svnserve -d --listen-port 9999 -r /srv/svn/repos
注意:后面的路径必须是一个svnadmin创建的仓库路径,否则会报错:Not a repository
4.客户端访问
svn list svn://host/
返回为空,因为你还没有上传任何东西啊
svn mkdir -m "document" svn://host/doc
这样便创建了doc文件夹,这个过程可能需要输入密码
svn 端口和常用命令
有效选项:
-d [--daemon] : 后台模式
--listen-port 参数 :
监听端口(后台模式)
--listen-host 参数 : 监听主机名或IP地址(后台模式)
--foreground : 在前台运行(调试时有用)
-h [--help] :
显示这个帮助
--version : 显示程序版本信息
-i [--inetd] :
inetd 模式
-r [--root] 参数 : 服务根目录
-R [--read-only] :
强制只读成;优先于仓库配置文件
-t [--tunnel] : 隧道模式
--tunnel-user 参数 :
隧道用户名(模式是当前用户UID的名字)
-X [--listen-once] : 监听一次(调试时有用)
--pid-file
参数 : 将服务进程ID写入文件ARG中
--service :
作为windows服务运行(仅SCM)[/quote]
你可以用--listen-port 指定端口
在httpd.conf中,查找Listen 80,将80修改为你想要的端口,svn默认端口是3690
为svnserve 加上--listen-port参数,比如svnserve -d -r d:\svn --listen-port
81
你可以采用svn+apache组合搭建,既可以设置你想要的端口,还可以以WEB形式访问代码库
通过以上三步,可以快速的搭建起svn
SVN数据库迁移方法
版本库数据的移植:svnadmin dump、svnadmin load
导出:
$svnadmin dump repos > dumpfile //将指定的版本库导出成文件dumpfile
新建:
$svnadmin create newrepos
导入:
$svnadmin load newrepos < dumpfile