SVN版本管理

1、搭建SVN服務端

一、安裝配置SVN服務 
光盤安裝svn yum -y install subversion 
image_1ct2j03pf1dvc1c1t1o9s19lh12jj13.png-7.7kB
shell

image_1ct2j77f6192c1lvplku1rds1r891g.png-24.2kB

二、創建項目版本庫vim

建立一個新的Subversion項目yunjisuan,其實,相似yunjisuan這樣的項目能夠建立多個,每一個項目對應不一樣的代碼,這裏只是以建立一個項目爲例演示:windows

image_1ct2le47akt5g6v1s6k1iqum552d.png-35.3kB

三、編輯svn配置文件 
備份配置文件 cp svnserve.conf{,.bak} 
修改配置文件:vim svnserve.conf 
image_1ct2locck1c2u1lj9jghr2b7tk2q.png-62.9kB
安全

四、將authz文件和passwd文件拷貝到/application/svnpasswd下服務器

 
[root@jenkins conf]# cp /application/svndata/yunjisuan/conf/authz /application/svnpasswd/
[root@jenkins conf]# cp /application/svndata/yunjisuan/conf/passwd /application/svnpasswd/

 

五、啓動svn服務---svnserve -d -r /application/svndata/ 
svn啓動命令幫助 svnserve --help
app

image_1ct2m3b6cci31rdo1iah1q1jddq37.png-67.7kB

image_1ct2m4uqq4e21beh1mlfhrh1l5n3k.png-17.7kB

source /etc/sysconfig/i18n --->啓用中文字符集 
image_1ct2m8fk7c9t1oe41rhg1v9911cj41.png-8.4kB
ide

六、passwd文件及密碼設置 
image_1ct2mcdf5k2e1msf1jfmhk91vc74e.png-13.5kB
svn

七、authz的受權工具

注意: 1,權限配置文件中出現的用戶名必須已在用戶配置文件中定義 2,對權限配置文件的修改當即生效,沒必要重啓svnpost

 
  1. 權限配置說明
  2. #用戶組格式:
  3. groups
  4. =,
  5. 其中,1個用戶組能夠包含1個或多個用過戶,用戶間以逗號分隔。
  6. 例如:harry\_and\_sally = harry,sally #==>用戶組 = 用戶1,用戶2
  7. #版本庫目錄格式:
  8. [<版本庫>:/項目/目錄] #例如:[repository:/baz/fuz]
  9. @<用戶組名> = <權限> #例如:@harry\_and\_sally = rw
  10. <用戶名> = <權限> #例如:harry = rw
  11. #其中,方框號內部分能夠有多種寫法:
  12. [/],表示根目錄及如下,根目錄是svnserve啓動時指定的,咱們指定爲/application/svndata,[/]就是表示對所有版本庫設置權限。
  13. [repos:/],表示對版本庫repos設置權限。
  14. [repos:/yunjisuan],表示對版本庫repos中的yunjisuan項目設置權限。
  15. [repos:/yunjisuan/benet],表示對版本庫repos中的yunjisuan項目的benet目錄設置權限。
  16. #權限主體能夠是用戶組,用戶或*,用戶組在前面加@,*表示所有用戶。
  17. #權限能夠是w,r,wr和空,空表示沒有任何權限。
  18. #authz中每一個參數都要頂格寫,開頭不能有空格。
  19. #對於組,要以@開頭,用戶不須要@開頭。

編輯authz配置文件進行受權,在authz末尾加入如下幾句代碼 
image_1ct2sld4v7ed1ab1k3cnia1u929.png-28.9kB

 

2、搭建SVN客戶端

1 使用svn客戶端(windows版) 
(1) 軟件版本選擇 
推薦:TortoiseSVN-1.9.7.27907-x64-svn-1.9.7

注意:32位系統要用32位軟件版本

參考連接,自行解壓安裝 
連接:https://pan.baidu.com/s/1Ow6MXOuQyMZnVp9ytH6NwQ 
提取碼:33o9

(2)svn客戶端軟件安裝 
一路yes便可

(3)svn客戶端軟件的使用 
先在本地建立一個目錄,起名任意,好比data

image_1ct2t31uj11f5dh91pn14021b30m.png-18.4kB

鼠標右鍵點擊data目錄

選擇右鍵菜單裏的SVN Checkout,出現下圖:

image_1ct2t5s2rqp31hso1dpm1uka1n1023.png-26.4kB

若是鏈接不通,檢查Linux虛擬機的iptables是否關閉。

點擊OK後,出現下圖: 
image_1ct2t9l3m1igi226c0q1ibi3l52g.png-35.8kB

再次點擊OK之後,結束。此時目錄裏多了一個隱藏的目錄,表示此目錄已經和svn服務器連通 
image_1ct2tdnotm4v1feu1a1ir152kq3d.png-12.1kB

 
  1. 命令說明:
  2. 1SVN Checkout:至關於下載,第一次鏈接svn服務器的時候須要和服務器的對應存儲目錄進行數據同步,若是服務器的對應目錄裏有數據文件,那麼就會下載到你的本地對應目錄裏。
  3. 2SVN Update:更新數據,檢查服務器端svn存儲目錄裏是否和本地svn存儲目錄數據不一致,若是不一致,那麼下載改變或新增的部分到本地svn目錄裏。(不會刪除本地目錄內容)
  4. 3SVN Commit:提交數據到svn服務器端存儲目錄。本地svn存儲目錄會和服務器端存儲目錄進行比對校驗。會把本地改變的部分和新增的部分同步上傳至服務器端。

二、svn客戶端使用測試 
(1)向windows的svn存儲目錄data裏放一個空文件

image_1ct2thqein3q10si1l4q1o6c16h53q.png-11.8kB

(2)右鍵點擊data目錄,選擇SVN Commit 
image_1ct2tltipvp98a614og16g6gbm4k.png-51.8kB

image_1ct2tnsev17um10a4jph144urdd61.png-38kB

(3)打開本地data目錄裏的文件,隨便寫點內容後,再次進行SVN commit

image_1ct2tqqbo1qlo173h19cfq3r1umj6e.png-54.7kB

image_1ct2trdg1lr13nq4kqgc21dnp6r.png-34.2kB

(4)直接從本地查看服務器端的數據內容 
右鍵點擊本地svn存儲目錄data,選擇TortoiseSVN ===>Repo-browser後出現下圖:

image_1ct2u5ep77vh1p6c83h5c0hfc7o.png-57kB 
雙擊文件能夠直接遠程打開文件,能夠看到裏面剛剛被修改後的內容已經更新至服務器端。

(5)刪除本地svn存儲目錄data裏的文件,後選擇SVN Update

會發現,剛剛刪除的文件又從新下載回來了。

(6)繼續刪除本地svn存儲目錄data裏的文件,後選擇SVN Commit 
image_1ct2u7isa1fc9gnk1c7sj91mmv85.png-77.8kB

(7)再次查看服務器端存儲目錄裏,發現文件已經被刪除了

image_1ct2ua5ko28ucr8129i1bcv103t9f.png-37.5kB

三、SVN的管理命令(Linux)

 
 1 [root@jenkins /]# svn --help
 2 usage: svn <subcommand> [options] [args]
 3 Subversion command-line client, version 1.6.11.
 4 Type 'svn help <subcommand>' for help on a specific subcommand.
 5 Type 'svn --version' to see the program version and RA modules
 6 or 'svn --version --quiet' to see just the version number.
 7 Most subcommands take file and/or directory arguments, recursing
 8 on the directories. If no arguments are supplied to such a
 9 command, it recurses on the current directory (inclusive) by default.
10 Available subcommands:
11 add
12 blame (praise, annotate, ann)
13 cat
14 changelist (cl)
15 checkout (co) #下載數據
16 cleanup
17 commit (ci) #提交數據
18 copy (cp)
19 delete (del, remove, rm)
20 diff (di)
21 export
22 help (?, h)
23 import
24 info
25 list (ls) #顯示服務器端內容
26 lock
27 log
28 merge
29 mergeinfo
30 mkdir
31 move (mv, rename, ren)
32 propdel (pdel, pd)
33 propedit (pedit, pe)
34 propget (pget, pg)
35 proplist (plist, pl)
36 propset (pset, ps)
37 resolve
38 resolved
39 revert
40 status (stat, st)
41 switch (sw)
42 unlock
43 update (up) #更新數據
44 Subversion is a tool for version control.
45 For additional information, see http://subversion.tigris.org/

 

(1)\從SVN庫提取數據

將文件checkout到本地目錄 svn checkout(co) remotepath localpath

image_1ct2v1ens4ke1ku81urn5ujcuo9s.png-20.8kB

 
  1. #下載服務器端數據到Linux本地目錄
  2. [root@jenkins yunjisuan]# svn co svn://192.168.200.128/yunjisuan/ /root/yunjisuan/ --username=benet --password=123123

image_1ct2v5crnrohtg219ensq6812a9.png-14.1kB

(2)\查看SVN版本庫中的數據

svn list file:///application/svndata/yunjisuan

image_1ct2v8eiu1bno9bm136mm5goivam.png-9.3kB

(3)\提交數據到SVN版本庫 
如下是一次失敗的提交 
image_1ct2vtrp61qujriv1rh1tkbcptb3.png-41.8kB

換帳戶從新Checkout 
image_1ct3057o0aulgvvh0fqp71hrqbg.png-55.5kB

image_1ct30c8dh136v1fumnp319ugmvqbt.png-38.9kB

image_1ct30fjef1kess2210go159i1qq5ca.png-46kB

 

3、SVN鉤子腳本

1 、鉤子腳本簡介

一、鉤子腳本的具體寫法就是操做系統中shell腳本程序的寫法,可根據本身的SVN所在的操做系統和shell程序進行相應的開發。 
二、鉤子腳本就是被某些版本庫事件觸發的程序,例如:建立新版本或修改未被版本控制的屬性。每一個鉤子都能掌管足夠的信息來了解發生了什麼事件,操做對象是什麼以及觸發事件用戶的帳號。 
三、根據鉤子的輸出或返回狀態,鉤子程序可以以某種方式控制該動做繼續執行,中止或掛起。

默認狀況下,鉤子的子目錄中包含各類版本庫鉤子模板 
image_1ct30nogr11r9qe61f2khsvt12cn.png-36.6kB

一、對每種Subversion版本庫支持的鉤子都有一個模板,經過查看這些腳本的內容,你能看到是什麼事件觸發了腳本及如何給傳腳本傳遞數據。 
二、同時,這些模板也是如何使用這些腳本,結合Subversion支持的工具來完成有用任務的例子。 
三、要實際安裝一個可用的鉤子,你須要在repos/hooks目錄下安裝一些與鉤子同名(如start-commit或者post-commit)的可執行程序或腳本,注意,去掉模板的擴展名。

重要提示:

因爲安全緣由,Subversion版本庫在一個空環境中執行鉤子腳本就是沒有任何環境變量,甚至沒有$PATH或%PATH%。因爲這個緣由,許多管理員會感到很困惑,他們的鉤子腳本手工運行時正常,可在Subversion中卻不能運行。要注意,必須在你的鉤子中設置好環境變量或爲你的程序指定好絕對路徑。

二、SVN的hooks模板 
(1)經常使用鉤子腳本 
image_1ct30qqepf971uam1vhj1dnf108fd4.png-29.9kB 
(2)經常使用鉤子腳本

一、pre-revprop-change:在修改revision屬性以前,執行該腳本 
二、post-revprop-change:在修改revision屬性以後,執行該腳本。由於修改稿已經完成,不可更改,所以本腳本的返回值被忽略(不過實際上的實現彷佛是該腳本的正確執行與否影響屬性修改) 
三、pre-unlock:對文件進行解鎖操做以前執行該腳本 四、post-unlock:對文件進行解鎖操做以後執行該腳本 
五、pre-lock:對文件進行加鎖操做以前執行該腳本 六、post-lock:對文件進行加鎖操做以後執行該腳本。

(3)利用鉤子腳本觸發同步數據的注意事項 
(1)必定要定義變量,主要是用過的命令的路徑。由於SVN的考慮的安全問題,沒有調用系統變量,若是手動執行是沒有問題,但SVN自動執行就會沒法執行了。

(2)SVN的同步目錄在 update以前必定要先checkout一份出來,還有這裏必定要添加用戶和密碼。

(3)加上了對前一個命令的判斷,若是update的時候出了問題,程序沒有退出的話還會繼續同步代碼到Web服務器上,這樣會形成代碼有問題。

(4)建議最好記錄日誌,出錯的時候能夠很快的排錯

(5)最後是數據同步,rsync的相關參數必定要清楚。

三、svn鉤子生產應用場景舉例

pre-commit:

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

post-commit:

SVN更新自動周知,MSN,郵件或短信周知。 
SVN更新觸發checkout程序,而後實時rsync推送到服務器等。

四、svn鉤子生產應用實戰 
(1)、 rsync與svn鉤子結合實現數據實時同步某企業小案例 
創建同步WEB目錄mkdir -p /data/www 
(2)、將SVN中內容checkout到WEB目錄一份。

 
 1 [root@jenkins ~]# svn checkout svn://192.168.200.128/yunjisuan /data/www/ --username=yunjisuan --password=123123
 2 A /data/www/111
 3 A /data/www/120
 4 A /data/www/112
 5 A /data/www/113
 6 A /data/www/114
 7 A /data/www/115
 8 A /data/www/116
 9 A /data/www/117
10 A /data/www/118
11 A /data/www/119
12 A /data/www/aaa.txt.txt
13 Checked out revision 6.
14 [root@jenkins ~]# ll /data/www/
15 total 44
16 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 111
17 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 112
18 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 113
19 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 114
20 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 115
21 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 116
22 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 117
23 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 118
24 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 119
25 drwxr-xr-x. 3 root root 4096 Nov 25 06:15 120
26 -rw-r--r--. 1 root root 7 Nov 25 06:15 aaa.txt.txt

 

(3)、製做鉤子腳本,post-commit

 
 1 cd /application/svndata/yunjisuan/hooks/
 2 cp post-commit.tmpl post-commit #複製模板一份
 3 vim post-commit #修改post-commit腳本
 4 REPOS="$1" #傳參(未用上)
 5 REV="$2" #傳參(未用上)
 6 SvnIP="192.168.200.128" #svn服務端的IP地址
 7 ProjectName="yunjisuan" #svn服務端的項目庫名稱
 8 UserName="yunjisuan" #帳戶姓名
 9 PassWord="123123" #帳戶密碼
10 LocalPath="/data/www" #位於svn本地的共享目錄
11 SVN=/usr/bin/svn #svn命令的絕對路徑
12 export LC_CTYPE="en_US.UTF-8" #中文字符集支持
13 export LC_ALL=
14 if [ ! -d ${LocalPath} ];then
15 mkdir -p ${LocalPaht}
16 $SVN checkout svn://${SvnIP}/${ProjectName} ${LocalPath} --username=${UserName} --password=${PassWord} #新建立目錄須要先通過checkout才能update
17 else
18 $SVN update --username yunjisuan --password 123123 /data/www #更新共享目錄內容
19 fi
20 if [ $? -eq 0 ];then
21 /usr/bin/rsync -az --delete /data/www /tmp/ #數據同步推送到本地/tmp目錄下(生產環境能夠直接同步推送到Web測試服務器)
22 fi

 

(4)進行鉤子腳本同步測試 
刪除以前的測試記錄 
rm -rf /data/www/ 
chmod 700 post-commit 給鉤子腳本可執行權限

特別提示: 當用戶經過svn更新鉤子post-commit所在的項目庫時,在更新完畢以後會自動觸發鉤子腳本

模擬更新項目庫版本 
image_1ct34grms1dbq1a2112i813t71k1qdu.png-46.1kB

image_1ct34hafbgrt1abe1sukch16dheb.png-37.7kB

image_1ct34i7ed1n6oaigip1181vs1bf8.png-97.7kB

相關文章
相關標籤/搜索