問題:
- 安裝優化軟件環境nginx,lvs
- 程序代碼(不斷更新)
- 配置更新(不斷變更)
1、SVN介紹
1.1 什么是SVN(Subversion)?
SVN(Subversion)是近年來崛起的非常優秀的版本管理工具,與CVS管理工具一樣,SVN是一個跨平台開源的版本控制系統。SVN版本管理工具管理着隨時間改變的各種數據。這些數據放置在一個中央資料檔案庫(repository)中,這個檔案庫很像一個普通的文件服務器或者FTP服務器。與其他服務器不同的是,SVN會備份記錄每個文件每一次的修改變動。這樣我們就可以把任意一個時間點的檔案回復到想要的某一個舊的版本,也可以直接瀏覽指定文件的更新歷史記錄。
為什么會有SVN這樣一個項目?
官方解釋:為了接管CVS的用戶基礎,確切的說,我們寫了一個新的版本控制系統,他和CVS很相似,但是它修正了CVS所沒有解決的問題。詳情見官網。
SVN是一個非常通用的軟件管理系統,它常被用來管理程序源碼,但是它也可以管理任何類型的文件,如文本、視頻,圖片等等。
SVN相關站點:
Subversion官網:https://subversion.apache.org
SVN客戶端:http://tortoisesvn.sourceforge.net/
SVN中文網站:http://svndoc.iusesvn.com/
截止當前常見的版本管理軟件有:VSS、CVS、StarTeam、SVN、GIT。
1.2 SVN與GIT的區別
1.2.1 SVN是集中式版本控制系統
SVN版本控制系統是集中式的數據管理,存在一個中央版本庫,所有開發人員本地開發所使用的代碼都是來自於這個版本庫,提交代碼也必須提交到這個中央版本庫。
SVN版本控制系統工作流程如下:
1.在中央版本庫上創建或沖主干復制一個分支。
2.從中央版本庫上check out 下這個分支的代碼。
3.進入自己的分支,進行開發工作。每隔一段時間提交一次代碼。
4.在快下班的時候commit代碼,假設有人在剛剛的分支上面提交了代碼,你就會被提示代碼過期,你得先update你的本地代碼然后在更新提交。update時如果出現沖突,需要解決好沖突后(代碼合並)后在進行提交,把自己的分支代碼提交到主干。
優點:
1.對於某些項目的核心代碼或者是一些重要的保密性要求較高的項目,svn比git更適合。
2.svn支持空目錄
3.svn有更好的windows平台支持
4.svn可以check out/clone一個子樹(sub-tree)
5.svn支持特權訪問控制svn lock,在處理很難合並的文件時非常有用
6.svn支持二進制文件,更容易處理大文件(不需要把老版本拷來拷去)
7.學習簡單、使用簡單
缺點:
1.無網的情況下:無法提交代碼,無法查看代碼的歷史版本、無法同步代碼
2.代碼要定期做備份(所有的代碼數據及版本變更記錄)
3.分支切換緩慢
4.由於每次提交都會保留一個原始副本,因此SVN的數據庫容量會暴增。尤其是在開發人員非常多的情況下。
1.2.2 GIT是分布式版本控制系統
工作模式:
git沒有中央版本庫,但是為了方便開發小組的成員們進行代碼共享,我們通常會搭建一個遠程的git倉庫。和svn不同的是開發者本地也包含一個完成的git倉庫,從某種程度上來說本地的倉庫和遠程的倉庫在身份上是等價的,沒有主從。
如果你的項目是一個閉源的項目,或者你習慣於以往的集中式管理,那么在git下你也可以向svn那樣工作,還不過流程會增加一些步驟。
1.你在本地創建一個git倉庫,並將其add到遠程的git倉庫中
2.你在本地增刪改文件,然后commit,這里的commit是提交到本地的git倉庫中了(其實就是提交到,本地的git目錄下的object目錄中)
3. 將本地的git倉庫的分支push到遠程git的倉庫的分支,如果這個時候遠程git倉庫中已經有別人push過,那么遠程的git倉庫是不願徐你push的,這個時候你要先pull,如果有沖突,處理好沖突,commit到本地git倉庫后,在push到遠程的git庫。
優點:
1.比svn方便和快捷的切換分支
2.書寫的代碼可以隨時提交
3.豐富的命令行操作和組合
4.可以一人一個倉庫,倉庫可以有多個分支
缺點:
1.沒有一個較好的桌面集成工具
2.不支持二進制文件
3.學習成本高
1.3 運維人員對版本管理系統需要掌握的
- 安裝、部署、維護、排障
- 簡單使用,很多公司都是由開發來管理,包括建立倉庫和添加刪除賬號
- 對於版本控制系統,運維人員要相當於開發商,開發人員是業主,運維搭建的系統為開發人員服務
1.4 SVN服務運行方式和訪問方式
1.4.1 SVN服務端運行方式
1.獨立服務器訪問
訪問地址如:svn://svn.test.com/test
2.借助Apache等http服務
訪問地址如:http://svn.test.com/test
a.單獨安裝Apache+svn
b.CSVN(Apache+SVN)是一個單獨的整合的軟件,帶web界面管理的SVN軟件
3.本地直接訪問
1.4.2 SVN客戶端訪問方式
svn客戶端可以通過多種方式訪問服務器端,例如:本地磁盤訪問,或各種各樣的網絡協議訪問,但是一個版本庫地址永遠都是只有一個URL,URL反映了訪問方法
訪問方式 | 說明 |
file:/// | 直接通過本地磁盤或者網絡磁盤訪問版本庫 |
http:// | 通過WebDAV協議訪問支持Subversion的Apache服務器 |
https:// | 與http://相似,但是用SSL加密訪問 |
svn:// | 通過TCP/IP自定義協議訪問是SVN服務器 |
svn+ssh:// | 通過認證並加密的TCP/IP自定義協議訪問svn服務器 |
1.5 SVN檔案數據格式
svn服務器存儲的數據格式有2種方式:BDB(一種事物安全型表類型)和FSFS(一種不需要數據庫的存儲系統)。因為BDB方式在服務器中斷時,有可能鎖住數據,所以還是FSFS更安全一點。
BDB:
伯克利DB(Berkeley DB),版本庫可以使用的一種經過充分測試的后台數據庫實現,不能再通過網絡共享的文件系統上使用,伯克利DB是Subversion1.2版本以前的缺省版本庫格式
FSFS:
一個專用於Subversion版本庫的文件系統后端,可以使用網絡文件系統(例如:NFS或SMBFS)。是1.2版本及以后的缺省版本庫格式。
CVS是個基於RCS文件的版本控制系統。每個CVS文件都不過是普通的文件,加上一些額外的信息。這些文件會簡單的重復本地文件的樹結構。因此,不必擔心有什么數據損失,如果必要的話可以手工修改RCS文件。
svn是基於關系型數據庫的BDB或一系列二進制文件的FSFS。這解決了許多問題(如:並行讀寫共享文件)以及添加了許多新功能(如:運行時的事物特性)。然而另一方面,數據存儲由此變得不透明,不能像ftp,samba,nfs等能看到實體的文件。
1.6 SVN版本系統邏輯學架構原理圖
1.7 SVN版本管理工作流程

集中式代碼管理的核心是SVN服務器,開發者在開始新一天工作之前必須現在本地update一下代碼,然后開發、解決沖突、合並。所有的版本信息都放在SVN上面。