# SVN服务器搭建
[TOC]
>[info] svn(subversion)是今年来崛起的版本管理工具,与CVS一样,SVN是一个跨平台的开源的版本控制系统,Subversion管理着随时间改变的数据,这些数据放置在一个中央资料档案库(repository)中。
这个档案库很像一个普通的文件服务器,不过**它会记住每一次文件的变动**。这样就可以把档案恢复旧的版本,或是浏览文件的变动历史。
SVN是一个通用的软件系统,它不但可以用来管理程序源码,他也可以管理任何类型的文件,如文本、视频,图片等等。
**以下为步骤总结**
1. 安装svn服务器 `yum -y install subversion`
2. 创建svn服务器目录 `mkdir -p /opt/svn/svndata /opt/svn/svnpasswd`
3. 启动svn服务器 `svnserve -d -r /opt/svn/svndata`
4. 创建一个新的svn项目 `svnadmin create /opt/svn/svndata/app`
5. 更改主配置文件并指定权限和用户名密码配置文件
6. 配置用户和用户、用户组权限
7. 重启svn服务器
8. 使用客户端连接测试
相关站点:
http://subversion.tigris.org/
http://subversion.apache.org/
http://tortoisesvn.net/
## SVN服务运行模式与访问方式
### SVN服务端运行方式
svn服务器常见的有三种运行访问方式:
1. 独立服务器(例如:**svn**://svn.blogcurder.com/document)
2. 借助apache(例如:**http**://svn.blogcurder.com/document)
3. 本地直接访问(例如:**file**:///svn.blogcurder.com/document)
### SVN数据格式
svn存储版本数据也有2种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全些。
SVN是基于关系数据库的(BerkleyDB)或一些列二进制文件的(FSFS)。一方面这解决了许多问题(例如:并行读写共享文件)以及添加了许多新功能(例如运行时的事务特性),然而另一方面,数据存储由此变得不透明。
### 集中式版本管理系统
集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交代码。所以的版本信息都放在服务器上。如果脱离了服务器,开发者就无法工作。
**缺点**
1. 服务器压力大,svn数据库容量暴增
2. 如果不能连接到服务器上,就不能提交、还原、对比等。
3. 不适合开源开发,但是一般集中式管理的有非常明确的权限管理机制,可以实现分层管理,从而很好的解决开发人数众多的问题。
**优点**
1. 管理方便,逻辑明确,符合一般人思维习惯。
2. 易于管理,集中式服务器更能保证安全性。
3. 代码一致性非常高。
4. 适合开发人数不多的项目开发
5. 大部分软件配置管理的大学教材都使用svn。
## 安装配置SVN
### 查看系统环境
~~~
[root@localhost.localdomain /etc/yum.repos.d]
# cat /etc/redhat-release
CentOS release 6.7 (Final)
[root@localhost.localdomain /etc/yum.repos.d]
# uname -m
x86_64
[root@localhost.localdomain /etc/yum.repos.d]
# uname -r
2.6.32-573.7.1.el6.x86_64
[root@localhost.localdomain /etc/yum.repos.d]
# uname -a
Linux localhost.localdomain 2.6.32-573.7.1.el6.x86_64 #1 SMP Tue Sep 22 22:00:00 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
~~~
### 安装SVN
~~~
# yum安装rpm包安装后本地不清除的方法
[root@localhost.localdomain /etc/yum.repos.d]
# sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
[root@localhost.localdomain /etc/yum.repos.d]
# grep keepcache /etc/yum.conf
keepcache=1
# 使用yum安装svn
[root@localhost.localdomain /etc/yum.repos.d]
# yum -y install subversion
# 检查是否已安装
[root@localhost.localdomain /etc/yum.repos.d]
# rpm -qa subversion
subversion-1.6.11-15.el6_7.x86_64
~~~
### 配置并启动SVN
#### 建立svn版本库根目录(svndata)以及密码权限目录(svnpasswd)
`mkdir -p /opt/svn/svndata /opt/svn/svnpasswd`
#### 指定服务的svn根目录启动svn服务
`svnserve -d -r /opt/svn/svndata`
#### 查看svn服务帮助
~~~
[root@localhost.localdomain /opt/svn]
# svnserve --help
用法: svnserve [-d | -i | -t | -X] [options]
有效选项:
-d [--daemon] : 后台模式
-i [--inetd] : inetd 模式
-t [--tunnel] : 隧道模式
-X [--listen-once] : 监听一次方式(调试用)
-r [--root] ARG : 服务的根目录
-R [--read-only] : 强制只读;覆盖版本库配置文件
--config-file ARG : 从文件 ARG 读取配置
--listen-port ARG : 监听端口
[方式: daemon, listen-once]
--listen-host ARG : 监听主机名称或IP地址
[方式: daemon, listen-once]
-T [--threads] : 使用线程代替进程 [方式: daemon]
--foreground : 在前台运行(调试用)
[方式: daemon]
--log-file ARG : svnserve 日志文件
--pid-file ARG : 写进程 PID 到文件 ARG
[方式: daemon, listen-once]
--tunnel-user ARG : 隧道用户名(默认是当前UID对应的用户名)
[方式: tunnel]
-h [--help] : 显示本帮助
--version : 显示程序版本信息
~~~
#### 查看进程和端口
~~~
[root@localhost.localdomain /opt/svn]
# ps -ef |grep svn|grep -v grep
root 2767 1 0 15:59 ? 00:00:00 svnserve -d -r /opt/svn/svndata/
[root@localhost.localdomain /opt/svn]
# netstat -tunpl|grep svnserve
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 2767/svnserve
# 或者
[root@localhost.localdomain /opt/svn]
# lsof -i tcp:3690
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
svnserve 2767 root 3u IPv4 37535 0t0 TCP *:svn (LISTEN)
~~~
## 建立版本库
### 创建一个新的Subversion项目**`app`**
~~~
[root@localhost.localdomain /opt/svn]
# svnadmin create /opt/svn/svndata/app
[root@localhost.localdomain /opt/svn]
# ls -l /opt/svn/svndata/app/
总用量 24
drwxr-xr-x. 2 root root 4096 10月 13 16:23 conf
drwxr-sr-x. 6 root root 4096 10月 13 16:23 db
-r--r--r--. 1 root root 2 10月 13 16:23 format
drwxr-xr-x. 2 root root 4096 10月 13 16:23 hooks
drwxr-xr-x. 2 root root 4096 10月 13 16:23 locks
-rw-r--r--. 1 root root 229 10月 13 16:23 README.txt
~~~
### 查看帮助方法
~~~
[root@localhost.localdomain /opt/svn]
# svnadmin help
一般用法: svnadmin SUBCOMMAND REPOS_PATH [ARGS & OPTIONS ...]
使用“svnadmin help <subcommand>” 得到子命令的帮助信息。
使用“svnadmin --version”查看程序的版本号和文件系统模块。
可用的子命令:
crashtest
create
~~~
#### 查看具体参数帮助
~~~
[root@localhost.localdomain /opt/svn]
# svnadmin help create
create: 用法: svnadmin create REPOS_PATH
在 REPOS_PATH 创建一个新的空版本库。
有效选项:
--bdb-txn-nosync : 在提交事务时禁用fsync [BDB]
--bdb-log-keep : 禁用自动删除日志文件 [BDB]
--config-dir ARG : 从目录 ARG 读取用户配置文件
~~~
### 配置用户对app项目允许读写访问
~~~
# 修改前养成备份的好习惯
[root@localhost.localdomain ~]
# cd /opt/svn/svndata/app/conf && cp svnserve.conf svnserve.conf.$(date +%F)
# 修改前先查看下
[root@localhost.localdomain /opt/svn/svndata/app/conf]
# egrep '\-access|\-db =' svnserve.conf
# anon-access = read
# auth-access = write
# password-db = passwd
# authz-db = authz
# 使用vim命令对文件进行修改
anon-access = none # 文件12行处
auth-access = write # 文件13行处
password-db = /opt/svn/svnpasswd/passwd # 文件20行出
authz-db = /opt/svn/svnpasswd/authz # 文件27行出
# 修改完后检查
[root@localhost.localdomain /opt/svn/svndata/app/conf]
# egrep '\-access|\-db =' svnserve.conf
anon-access = none
auth-access = write
password-db = /opt/svn/svnpasswd/passwd
authz-db = /opt/svn/svnpasswd/authz
~~~
### 修改用户权限
#### 新增用户名和密码
~~~
# 拷贝用户权限和密码配置文件
[root@localhost.localdomain /opt/svn/svndata/app/conf]
# cp authz /opt/svn/svnpasswd/
[root@localhost.localdomain /opt/svn/svndata/app/conf]
# cp passwd /opt/svn/svnpasswd/
[root@localhost.localdomain /opt/svn/svndata/app/conf]
# ls /opt/svn/svnpasswd/
authz passwd
# 编辑密码文件
[root@localhost.localdomain /opt/svn/svnpasswd]
# cd /opt/svn/svnpasswd && vim passwd
#添加一下几个测试用户
rose = aaaaaa
luozhiqun = aaaaaa
guest = aaaaaa
test = aaaaaa
~~~
>[danger] `=`前面为svn用户帐号,`=`后面为用户密码,密码是明文密码,注意修改文件权限,例如: `chmod 600 passwd`。
更改svnserve.conf时,需要重启SVN服务器,更改authz和passwd文件时不需要重启。
#### 编辑权限文件
~~~
[root@localhost.localdomain /opt/svn/svnpasswd] # vim authz
其中 [groups] 下方是定义组信息,注意:用户帐号在passwd文件中。
配置规则为 :组名 = 用户名
其中用户名为passwd文件中存在的用户
例如添加如下内容:
develpeople = rose,luozhiqun
testpeople = test
[app:/] # 对项目app进行权限控制
@develpeople = rw # devel组对app项目的根有读写权限
@testpeople = r # test组对app项目有只读权限
guest = r # guest用户对app项目有只读权限
~~~
>[danger]
**注意:** 权限没有`x`,复制上述代码时请删除注释!(可能导致授权失败)
## 重启svnserve进程
~~~
pkill svnserve
svnserve -d -r /opt/svn/svndata
~~~
# 客户端连接SVN服务器
使用checkout指令检出**app**项目 输入 `svn://192.168.1.169/app`进行检出操作,如果提示输入用户名和密码 则表示连接svn服务器成功。如果不成功检查服务器`iptables`和`selinux`是否拦截了连接请求。
复选框能让TortoiseSVN在subversion的缺省目录:`cmd`敲入`%APPDATA%\Subversion\auth`打开的三个子目录内保存认证信息:
* svn.simple 里面包含了基本认证方式所需要的认证信息(用户名/密码),保存的密码是通过WinCrypt API加密的,不是文本形式。
* svn.ssl.server 里包含了SSL服务器证书
* svn.username 里面包含了用户名认证的认证信息(无须提供密码)
## 监视SVN提交的工具
### 下载地址
`http://www.softpedia.com/get/Tweak/System-Tweak/CommitMonitor.shtml#download`
下载解压后,打开程序窗口,新建product输入:
~~~
Product name
url to monitor
check every 1 minutes
username
password
~~~
等信息,然后隐藏到任务栏,这样有更新软件会有反馈。
- Linux的安装
- Linux的软件安装管理
- Linux零碎的命令
- 了解ssh
- 系统调优及安全设置
- Linux系统中的硬链接和软连接
- Linux文件和目录的属性及权限
- 命令总结
- 文件目录管理命令
- cat
- cd
- cp
- ls
- mkdir
- mv
- rm
- touch
- vi
- 硬件检测内核shell命令
- echo
- alias
- dd
- diff
- date
- grep(重要)
- head
- rpm
- sed(重要)
- tree
- unalias
- yum
- seq
- su
- less
- more
- tail
- awk(重要)
- pwd
- history
- whoami
- find(重要)
- which
- vimdiff
- sudo
- wget
- ln
- chmod
- chown
- vim常用技巧
- scp
- 工作场景应用总结
- 自动删除n天前日志
- 删除一个目录下的所有文件但保留一个文件
- Linux软件安装
- php安装(apache版本)
- vsftpd安装
- git安装
- python安装
- LNMP安装
- LAMP安装I
- LAMP安装II
- svn安装
- svn在Linux下的命令操作
- svn钩子简介
- svn代码上传流程
- Crond介绍
- sersync应用指南
- 其他
- 小结一
- 系统调优重新整理tmp
- linux禁止root用户直接登录sshd并修改默认端口