項目(七)SVN版本管理與大型代碼上線方案

 

SVN介紹

  • Svn(subversion)是近年來崛起的很是優秀的版本管理工具,與CVS管理工具同樣,SVN是一個跨平臺的開源的版本控制系統。Svn版本管理工具管理着隨時間改變的各類數據。這些數據放置在一箇中央資料檔案庫(repository)中,這個檔案庫很像一個普通的文件服務器或者FTP服務器,可是,與其餘服務器不一樣的是,SVN會備份並記錄每一個文件每一次的修改更新變更。這樣咱們就能夠把任意一個時間點的檔案恢復到想要的某一箇舊的版本,固然也能夠直接瀏覽指定文件的更新歷史記錄。
  • 爲何會有svn這樣一個項目?
  • 官方解釋:爲了接管CVS的用戶基礎,確切的說,咱們寫了一個新的版本控制系統,它和CVS很類似,可是它修正了之前CVS所沒有解決的許多問題。問題見SVN官方首頁。
  • SVN是一個很是通用的軟件系統,它常被用來管理程序源碼,可是它也能夠管理任何類型的文件,如文本,視頻,圖片等等。

SVN相關站點:html

Subversion官網:
http://subversion.tigris.org/
http://subversion.apache.org/
svn客戶端:http://toroisesvn.net/
svn中文網站:http://www.iusesvn.com/
中文常見問題解答FAQ:http://subversion.apache.org/faq.zh.html
官方手冊:http://svnbook.red-bean.com/ 中英都有linux

svn與git的區別 

 svn集中式版本控制系統

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

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

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

缺點:web

當沒法鏈接到中央版本庫的環境下,你沒法提交代碼,將代碼加入版本控制;
你沒法查看代碼的歷史版本以及版本的變化過程。提交到版本控制系統中的代碼咱們都默認經過自測可運行的,若是某個模塊的代碼比較複雜,不能短期內實現爲可測試的功能,那麼你須要等很長的時間才能提交本身的代碼,因爲代碼庫集中管理,所以,須要對中央版本庫的存儲作備份。這點分佈式的版本控制系統要好一些。Svn的備份要備份全部代碼數據以及全部更改的版本記錄。數據庫

 git分佈式的版本控制

  • git是由Linus開發的,因此很天然的git和Linux文件系統結合的比較緊密,以致於在windows上你必須使用cygwin才能使其完美的工做。
  • 那git憑啥叫作分佈式的版本控制系統呢?仍是從其工做模式講起把。
  • git中沒有了中央版本庫的說法了,可是爲了開發小組的代碼共享,咱們一般仍是會搭建一個遠程的git倉庫。
  • 可是和svn不一樣的是,開發者本地也包含了一個完整的git倉庫,從某種程度上說本地的倉庫和遠程的倉庫在身份上是等價的,沒有主從之分。
  • 若是你的項目是閉源項目,或者你習慣於以往的集中式的管理模式的話,那麼在git下你也能夠像svn那樣的工做,只是流程中可能會增長一些步驟。
  1. 你本地建立一個git庫,並將其add到遠程git庫中。
  2. 你在本地添加或者刪除文件,而後commit,固然commit操做都是提交到本地的git庫中了。(嗯,實際上是提交到git目錄下的objects目錄中去了)
  3. 將本地git庫的分支push到遠程git庫的分支,若是這個時候遠程git庫中已經有別人push過,那麼遠程git庫將不容許你push,這時候你須要先pull,而後若是有衝突,處理好衝突,commit到本地git庫後,再push到遠程git庫。

從上面的描述咱們能夠看到,咱們每一個開發人員的本地都會有一個git庫,咱們能夠隨時進行commit而不須要聯網,能夠隨時查看歷史版本,當某一個功能點開發完了以後咱們能夠將commit後的內容push到遠程git庫了,若是遠程git庫的版本在你上次clone或者pull以後變化了,那麼你須要進行pull並處理衝突,提交以後,再push到遠程git庫。apache

運維人員掌握版本管理

對於版本管理系統,運維人員須要掌握的技術點:windows

  1. 安裝,部署,維護,排障。
  2. 簡單使用,不少公司都是由開發來管理,包括創建新倉庫和添加刪除帳號
  3. 對於版本控制系統,運維人員至關於開發商,開發人員是業主,運維搭建的系統爲開發人員服務的。

1.5 SVN服務運行模式與訪問方式

1.5.1 SVN服務端運行方式

svn服務常見的運行訪問方式有3種:後端

(1)獨立服務器訪問安全

訪問地址如:svn://svn.yunjisuan.org/sadoc;

(2)藉助apache等http服務

訪問地址如:http://svn.yunjisuan.com/sadoc;

a,單獨安裝apache+svn(不要用)
b,CSVN(apache+svn)是一個單獨的整合的軟件,帶web界面管理的SVN軟件

(3)本地直接訪問(例如:file://application/svndata/sadoc)

QQ截圖20170912203307.png-75.6kB

在這裏,主要給同窗們介紹第一種方式以及第二種方式中的CSVN web管理方式

1.5.2 SVN客戶端訪問方式

SVN客戶端能夠經過多種方式訪問服務器端,例如:本地磁盤訪問,或各類各樣不一樣的網絡協議訪問,但一個版本庫地址永遠都是一個URL,URL反映了訪問方法。

訪問方式 說明
file:// 直接經過本地磁盤或者網絡磁盤訪問版本庫
http:// 經過WebDAV協議訪問支持Subversion的Apache服務器
https:// 與http://類似,可是用SSL加密訪問
svn:// 經過TCP/IP自定義協議訪問svnserve服務器
svn+ssh:// 經過認證並加密的TCP/IP自定義協議訪問svnserve服務器

1.6 SVN檔案庫數據格式

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

  • BDB:

伯克利DB(Berkeley DB),版本庫可使用的一種通過充分測試的後臺數據庫實現,不能在經過網絡共享的文件系統上使用,伯克利DB是Subversion 1.2版本之前的缺省版本庫格式

  • FSFS:

一個專用於Subversion版本庫的文件系統後端,可使用網絡文件系統(例如 NFS 或 SMBFS)。是1.2版本及其後的缺省版本庫格式。

1.7.1 SVN 集中式版本管理系統

Svn是一種集中式文件版本管理系統。集中式管理的工做流程以下圖:

QQ截圖20170912205406.png-31.5kB

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

1.7.2 開發者利用SVN版本管理系統工做過程

下面舉例說明:

開始新一天的工做:

  1. 首先從SVN服務器下載項目組最新代碼。
  2. 進入本身的分支,進行開發工做,每隔一小時向服務器上本身的分支提交一次代碼(不少程序員都有這個習慣。由於有時候本身對代碼改來改去,最後又想還原到新一個小時的版本,或者看看前一個小時本身修改了哪些代碼,就須要這樣作了)。
  3. 下班時間快到了,把本身的分支合併到服務器主分支上,一天的工做完成,並反映給服務器。

優勢:

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

 搭建SVN服務端

創建svn版本庫數據存儲根目錄(svndata)及用戶,密碼權限目錄(svnpasswd)

第一個目錄是數據存儲根目錄

第二個目錄是用戶,密碼權限目錄

創建項目版本庫

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

編輯svn配置文件

修改如上,特別提示:此配置文件裏的每條配置代碼必須頂格寫,不能有空格。

12行表示:禁止匿名訪問   13:驗證訪問可寫  20:密碼文件位置  27:驗證文件位置

將authz文件和passwd文件拷貝到/application/svnpasswd下

啓動svn服務

svn啓動命令幫助

passwd文件及密碼設置

authz的受權

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

重啓動svnserve

搭建SVN客戶端

使用svn客戶端(windows版)

 軟件版本選擇

推薦:TortoiseSVN-1.9.7.27907-x64-svn-1.9.7

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

svn客戶端軟件的使用

(1)先在本地建立一個目錄,起名任意,好比data

鼠標右鍵點擊data目錄

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

ip是本身虛擬機ip,yunjisuan爲項目目錄

特別提示:
若是鏈接不通,請檢查Linux虛擬機的iptables是否關閉。

點擊OK後,出現下圖:

密碼爲123123

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

若是沒有隱藏目錄,多是windows設置的不顯示隱藏目錄

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

svn客戶端使用測試

(1)向windows的svn存儲目錄data裏放一個空文件

(2)右鍵點擊data目錄,選擇SVN Commit

選擇文件,點擊OK

再點擊OK

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

顏色變了,說明有更新

(4)直接從本地查看服務器端的數據內容

右鍵點擊本地svn存儲目錄data,選擇TortoiseSVN ===>Repo-browser後出現下圖:

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

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

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

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

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

SVN的管理命令(Linux)

 
  1. [root@localhost ~]# 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/

從SVN庫提取數據

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

下載服務器端數據到Linux本地目錄

 

查看SVN版庫中的數據

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

 

提交數據到SVN版本庫

(1)一次失敗的提交

(2)換帳戶從新Checkout

相關文章
相關標籤/搜索