svn服務

svn服務實戰應用指南 linux

1.1     svn介紹程序員

 

什麼是svn? web

svn(sub-version)是近年來崛起的很是優秀的版本管理工具,與cvs管理工具同樣,svn是一個跨平臺的開源的版本控制系統,svn版本管理工具管理者隨時間改變的各類數據shell

這些數據放置在一箇中央資料檔案庫中,這個檔案庫很像一個普通的文件服務器或者ftp服務器,可是,不同凡響的是,svn會備份並記錄每一個文件每一次的修改更新變更,這樣咱們就能夠把任意一個時間點的檔案恢復到想要的某一箇舊的版本(回滾),固然也能夠直接瀏覽制定文件的更新歷史記錄數據庫

 

爲何會有svn這樣的一個項目apache

 

官方解釋:爲了接管cvs的用戶基礎 windows

svn是一個很是通用的軟件系統,它常被用來管理程序源碼,可是它也能夠管理任何類型的文件,如文本,視頻,圖片等等安全

 

svn相關站點:服務器

http://www.iusesvn.com/  svn中文網站架構

http://tortoisesvn.net    svn客戶端

svn 集中式版本控制系統

svn版本控制系統是集中式的數據管理,存在一箇中央版本庫,全部開發人員本地開發所使用的代碼都是來自於這個版本庫,提交代碼也都必須提交到這個中央版本庫

svn版本控制系統工做流程以下:

  1. 在中央庫上建立或從主幹複製一個分支
  2. 從中央庫 check out下這個分支的代碼
  3. 增長几的代碼文件,修改現存的代碼或刪除代碼文件
  4. commit代碼,假設有人在剛剛的分支上提交了代碼,你就會被提示代碼過時,你得先up你的代碼後再提交,up代碼的時候若是出現衝突,須要解決好衝突後再進行提交

缺點:

當沒法鏈接到中央版本的環境下,你沒法提交代碼,將代碼加入版本控制,你沒法看到代碼的歷史版本以及版本的變化過程,提交到版本控制系統中的代碼咱們都默認經過自測可運行的,若是某個模塊的代碼比較複雜,不能短期內實現

爲可測的功能,那麼你須要等很長的時間才能提交本身的代碼,因爲代碼集中管理,所以,須要對中央版本庫的存儲作備份,這點分佈式的版本控制系統要好一些,svn的備份要備份全部代碼數據以及全部更改的版本記錄

 

企業應用場景

 

svn還是當前企業的主流,運維人員須要掌握的技術點:

運維人員掌握版本管理

1)     安裝、部署、維護、排障

2)     簡單使用,不少公司都由開發來管理,包括創建倉庫和添加和刪除帳號

3)     對於版本控制系統,運維人員至關於開發商,開發人員是業主,運維搭建的系統爲開發人員服務的

 

svn服務端運行方式3種

  1. 獨立服務器訪問 例如:svn://svn.hdxy.org/sadoc
  2. 藉助apache等http服務 例如: http://svn.hdxy.org/sadoc
    1. 單獨安裝apache+svn
    2. Csvn(apache + svn)是一個單獨的整合軟件,帶web界面管理的svn軟件
  3. 本地直接訪問  例如  file://application/svndata/sadoc

svn客戶端的訪問方式

 

訪問方式

說明

file://

直接經過本地磁盤訪問

http://

經過webdav協議訪問

svn://

經過tcp/ip自定義協議訪問

svn+ssh

經過認證並加密的方式

 

Svn檔案庫數據格式:

Svn存儲版本數據有2種方式:BDB(一種事物安全型表類型)和FSFS(一種不須要數據庫的存儲系統),由於BDB方式在服務器中斷時,有可能鎖住數據,因此仍是fsfs方式更安全一點

BDB 是1.2版本之前的默認數據格式

FSFs是1.2版本以後的默認數據格式

 

Svn是基於關係數據庫或一系列二進制文件的,一方面解決了許多問題(例如:並行讀寫共享文件)以及添加了許多新功能(例如:運行時的事物特性)然而另外一方面,數據存儲由此變得不透明,不能像ftp,nfs等能看到實體文件了

 

Svn 版本系統邏輯架構圖原理圖

客戶端----[http|svn|local] ------svnserver接口------svn版本庫-------後臺管理[bdb|fsfs]

略。。。

 

集中式代碼管理的核心是svn服務器,全部開發者在開始新一天的工做以前必須從服務器獲取代碼,而後進行開發,最後解決衝突、提交全部的版本信息都放在svn服務器上,所以若是脫離了服務器,開發者就沒法進行提交代碼工做

 

開發者利用svn版本管理系統工做流程:

 

開始新的一天的工做:

 

  1. 首先從svn服務器下載項目組新代碼
  2. 進入本身的分支,進行開發工做,每隔一個小時向服務器向服務器上本身的分支提交一次代碼(不少程序員都有這個習慣)
  3. 下班時間快到了,把本身的分支合併到服務器主分支上,一天的工做完成,並反映給服務器

缺點:

  1. 因爲每一次提交都保留一個原始副本,所以svn數據庫容量會暴增
  2. 若是不能鏈接到svn服務器上,基本上不能夠工做
  3. 不適合開源系統開發(開發人數很是多)

優勢:

  1. 管理方便,邏輯清晰,符合通常人的邏輯習慣
  2. 易於管理,集中式svn服務器更能保證數據安全性
  3. 代碼一致性很是高
  4. 適合開發人數很少的項目開發
  5. 普及度高,大部分軟件配置管理的大學教材都是使用svn

2.1 安裝配置svn服務

準備操做系統並查看系統環境 

Centos6.6 64位系統

內核 2.6.32

安裝svn

 

究竟是編譯安裝仍是yum安裝? 

編譯,yum or rpm

 

通常,輔助性的軟件用yum安裝,重量級的軟件用編譯

 

首先yum安裝

[root@hd3 ~]# yum -y install subversion

注意:yum安裝rpm包安裝後本地不清除的方法

 

[root@hd3 ~]# sed -i "s#keepcache=0#keepcache=1#g" /etc/yum.conf

[root@hd3 ~]# grep  keepcache /etc/yum.conf  

keepcache=1

 

2.1.3 配置並啓動svn

 

創建svn版本系統數據存儲根目錄

mkdir –p /application/svndata

mkdir –p /application/svnpasswd

 

啓動svn服務並指定服務的svn根目錄

 

svnserve –d –r /application/svndata/

 

-d --daemon 表示以守護進程(後臺方式,一直運行)的方式啓動程序

-r 表示指定數據存儲的目錄

檢查查看進程

 

ps –ef |grep svn

 

查看端口

netstat –lntup|grep 3690

 

lsof –i :3690

 

2.1.4 創建項目版本庫

 

建立一個新的subversion 項目 sadoc ,其實,相似sadoc這樣的項目能夠建立多個,每一個項目都是獨立的

 

svnadmin help 查看建立項目的幫助

svnadmin help create 表示建立新項目的幫助信息

 

例如:

svnadmin create /application/svndata/sadoc

 

表示建立一個新的項目sadoc(版本庫)

 

tree /application/svndata/sadoc

表示查看sadoc項目中的內容

 

2.15 調整svn配置文件及權限提高

 

配置容許用戶

 

cd /application/svndata/sadoc/conf

 

authz 權限管理文件

passwd 用戶和密碼配置文件

svnserve.conf 配置文件

下面編輯配置文件

vi svnserve.conf 修改 注意要頂格寫

 

12 anon-access = none 

13 auth-access = write

20 password-db = /application/svnpasswd/passwd

27 authz-db = /application/svnpasswd/authz

 

利用diff比較源文件和修改以後文件

將模版文件拷貝到相關目錄下

cp passwd authz  /application/svnpasswd/

 

修改權限

cd /application/svnpasswd/

 chmod  700 *

 

vi passwd 添加帳號

 

[users]

zhangsan = 123456

gongli = gongli

 

提示:

等號前是用戶名,等號後面是svn密碼

更改svnserve.conf時,須要重啓svn服務,其餘文件不用

 

 

 

authz 權限的配置文件

格式說明:

用戶組格式:

[groups]

= ,

其中1個用戶組能夠包含1個或多個用戶,用戶中間以逗號分隔。

 

版本庫目錄格式:

[版本庫:/項目/項目]

@用戶名 = 權限   #表示設置組的權限

用戶名 = 權限     #單個用戶的權限設置

/ ,表示根目錄及如下,咱們指定爲/application/svndata就是表示對所有版本庫設置權限

[repos:/] 表示對版本庫repos設置權限

[repos:/sadoc]表示對版本庫中的sadoc項目設置權限

[repos:/sadoc/oldboy]表示對版本庫repos中的sadoc項目的oldboy目錄設置權限

權限能夠是w ,r,wr和空,空表示沒有任何權限

 

authz中每一個參數都要頂格寫

 

 

案例:

vi authz  修改配置文件

sagroup = zhangsan,gongli

[sadoc:/]

zhangsan = rw

gongli = r

@sagroup = r

 

注意:權限文件裏的用戶必須在passwd中定義

 

重啓svn

reload 服務中 從新加載配置文件

pkill svnserve,

svnserve –d –r /application/svndata/

ps –ef|grep svn

 

客戶端軟件TORTOISE SVN

 

svn 客戶端鏈接服務器的方式,帳號及密碼

 

svn://192.168.1.13/sadoc

用戶名:zhangsan

密碼: 123456

安裝完svn客戶端以後,在本地建立一個目錄svndata,鼠標點擊右鍵 選擇 svn check out  以後出現一個窗口,調整一下訪問地址,以及本地的目錄路徑,點擊ok,輸入用戶名和密碼

點擊肯定 就ok了

1 checkout下載svn服務器上的資源

2 輸入正確的svn服務器的路徑

3.輸入帳號和密碼

4.提交修改後的代碼文檔

把一個代碼文件放在建立的目錄裏svndata ,而後選擇右鍵 svn commit 進行提交

若是想查看到底服務器上有沒有更新,怎麼辦 ?

右鍵 選擇 tortoiseSVN -----》repo-browser

到此svn部署成功了 !

按期下載

當svn有內容的時候,第二次更新的時候,變成svn update

 

>>按期上傳 svn內容

紫色:提交一個新增項


藍色:提交一個修改

深紅:提交一個刪除或替換

黑色:其餘

 

 

>>刪除svn的內容

在本地刪除文檔,而後點擊svn commit 將服務器上的文檔也刪除

 

>>查看svn目錄或者歷史版本

點擊右鍵tortoiseSVN  -----》show log

 

linux做爲svn 客戶端命令的使用

1.  將文件checkput 到本地目錄(從svn庫提取數據到本地)

例如:

在本地建立一個目錄 /data

svn co svn://192.168.1.13/sadoc/ /data/ --username=zhangsan --password=123456

 

說明:co表示下載 checkout的縮寫

 

和windows客戶端同樣 第二次下載就是update了

 

[root@hd3 ~]# svn up svn://192.168.1.13/sadoc/ /data/ --username=zhangsan --password=123456

 

若是出現不支持utf-8說明 linux客戶端的字符集有問題

 

解決方法:

 

調整字符集

 

export LC_CTYPE=’en_US.UTF-8’

export LC_ALL=

 

調整secure-crt的編碼

 >> 查看svn庫中的數據

 

[root@hd3 sadoc]# svn list svn://192.168.1.13/sadoc/ /data/ --username=zhangsan --password=123456 --verbose

      9 zhangsan              Mar 07 19:20 ./

      5 zhangsan          164 Mar 07  2015 clone.sh

 

Linux做客戶端

>> 從本地提交數據到svn服務器

 

cd /data #進入本地svn目錄

touch a b c # 建立abc三個文件

svn add a b c  #定義須要提交的文檔

svn ci –m 「svn ci data」 #提交數據ci表示提交 –m表示解釋說明

 

2.1 svn 鉤子腳本簡介

 

鉤子腳本的具體寫法就是操做系統中shell腳本程序的寫法,可根據本身的svn所在的操做系統和shell程序進行相應的開發

鉤子腳本就是被某些版本庫事件觸發的程序,例如:建立新版本或者修改未被版本控制的屬性,每一個鉤子都能掌管足夠多的信息來了解發生了什麼事件,操做對象是什麼,以及觸發事件用戶的帳號。

 

根據鉤子的輸出或者返回狀態,鉤子程序可以以某種方式控制該動做繼續執行,中止或者掛起

 

默認狀況下,鉤子的子目錄中包含各類版本庫鉤子模版

 

cd /application/svndata/sadoc/hooks

 

 

要使用一個鉤子,去掉模版的擴展名

重要提示:

鉤子腳本,手動執行能夠,可是放在subservision 中卻不能執行,緣由是沒有設置鉤子的路徑或環境變量

 

svn版本系統中鉤子種類及功能介紹

 

鉤子腳本

說明

post-commit

在提交完成成功創建版本以後執行該鉤子,提交已經完成,不可更改所以,本腳本的返回值被忽略,提交完成時觸發事武

pre-commit

提交完成前觸發該腳本

 

 

 

 

2.2 鉤子生產應用場景舉例

 

pre-commit

  1. 限制上傳文件擴展名及大小,控制提交要輸入的信息等。

post-commit

  1. svn更新自動周知,msn,郵件或者短信通知
  2. svn更新觸發checkout程序,而後實時rsync推送到服務器

2.3 svn鉤子生產應用實戰

 

2.3.1 rsync 與svn鉤子結合實現數據實時同步企業案例

需求:svn數據一更新,就要同步到/data/www目錄

1.創建同步web站點 /data/www

2.svn co svn://10.0.0.17/sadoc  /data/www –username=zhangsan –password=123456

3. cp post-commit.tmpl  post-commit

4. 修改post-commit 腳本文件內容以下

logpath=’/app/log’

[ ! –d ${logpath} ] && mkdir ${logpath} –p

 

SVN=/usr/bin/svn

$SVN update –username zhangsan –password 123456 /data/www

if [ $? –eq 0 ]

then

/usr/bin/rsync –az –delete /data/www  /tmp/

fi

 

 

注意:1)鉤子腳本的權限chmod 755 ,2)腳本內容中的命令儘可能是絕對路徑

 

企業案例邏輯圖

 

開發人員------》svn服務器-------》推送給web服務器(極簡版圖)

 

 

利用pre-commit限制擴展名或者大小

相關文章
相關標籤/搜索