# 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并修改默認端口