一、SVN簡介
SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,是近年來崛起的版本管理工具,
SVN是一個跨平臺的開源的版本控制系統,Subversion管理着隨時間而改變的數據。這些數據放置在一箇中央資料
檔案庫(repository)中,這個檔案庫很像一個普通的文件服務器,不過它會記錄每一次文件的變動。這樣就可以
實現把檔案恢復到舊的版本,或者瀏覽文件的變動歷史。
SVN:不但可以管理程序源代碼,還可以管理任何類型的文件,如:文本,圖片,視頻等等。
相關站點:http://subversion.tigris.org/
http://subversion.apache.org/
二、SVN訪問方式:
服務端訪問方式: 1.獨立服務器 例如:svn://svn.etiantian.org/sadoc
2.藉助apache 例如:http://svn.etiantian.org/sadoc
3.本地直接訪問 例如:file://svn.etiantian.org/sadoc
SVN客戶端訪問方式:
Subversion可以通過多種方式訪問以本地磁盤訪問,或各種各樣不同的網絡協議,但一個版本庫地址
永遠都是一個URL,URL方案反映了訪問方法。
訪問方法
file:// 直接版本庫訪問(本地磁盤或者網絡磁盤)
http:// 通過webDAV協議訪問支持Subversion的Apache服務器
https:// 與http://(ˇ?ˇ) (ˇ?ˇ) 類似,但是用SSL加密
svn:// 通過未認證的TCP/IP自定義訪問svnserver服務器
svn+ssh:// 通過認證的TCP/IP自定義訪問svnserver服務器
三、SVN數據格式:
SVN存儲版本數據也有2種方式:BDB(一種事物安全型表類型)和FSFS(一種不需要數據庫的存儲系統)。因爲BDB方式
在服務器中斷時,有可能鎖住數據,所以還是FSFS方式更安全一點。
CVS是個基於RCS文件的版本控制系統,每個CVS文件都不過是普通文件,加上一些額外信息。這些文件會簡單的重複本地文件的樹
結構,因此,不必擔心有什麼數據損失,如果有必要可以手動修改RCS文件。
SVN是基於關係數據庫的(BerkleyDB)或一系列二進制文件的(FS_FS)。一方面這解決了許多問題(例如:並行讀寫共享文件)
以及添加了許多新功能(例如運行時事物特性)。然而另一方面,數據存儲由此變得不透明。
四、svn架構原理圖
commandline GUI
client app client apps
命令行客戶端 圖形界面客戶端
-----------------------------------------------client interface 客戶端接口
Working Copy client LIbrary
management 客戶端庫
library
Repository ACCESS
DAV SVN Local
http方式 svn方式 本地訪問
APACHE svnserver
調用mod_dav模塊
mod_dav_svn
subversion Repository
Berkeley DB FSFS
五、工作流程
工作流程
編輯 集中式管理的工作流程如下圖:
集中式代碼管理的核心是服務器,所有開發者在開始新一天的工作之前必須從服務器獲取代碼,然後開發,最後解決衝突,提交。所有的版本信息都放在服務器上。如果脫離了服務器,開發者基本上可以說是無法工作的。下面舉例說明:
開始新一天的工作:
1、從服務器下載項目組最新代碼。
2、進入自己的分支,進行工作,每隔一個小時向服務器自己的分支提交一次代碼(很多人都有這個習慣。因爲有時候自己對代碼改來改去,最後又想還原到前一個小時的版本,或者看看前一個小時自己修改了哪些代碼,就需要這樣做了)。
3、下班時間快到了,把自己的分支合併到服務器主分支上,一天的工作完成,並反映給服務器。
這就是經典的svn工作流程,從流程上看,有不少缺點,但也有優點。
優缺點
所有的文檔都顯示SVN可以取代CVS,同時SVN的問題和缺點都被隱藏了。不幸的是,我們並不認爲SVN是CVS的替代品,儘管很多缺陷都被修改了。更有甚者,它甚至讓人重回CVS。CVS和SVN的比較類似於比較C++和Java。很明顯CVS和SVN都遠比SourceSafe強大的多,如同C++和Java比Basic強大的多。CVS代表了幾乎代碼控制系統的所有功能項,儘管有時他的實現並不很方便。SVN修正並添加了一些CVS並不擁的有功能。例如,創建標誌和分支dubious,你在編輯文件時其他人不會有任何通知。SVN並不是CVS的替代品,只是個不同的系統,類似於CVS。它有些特有的功能,足以作爲採用它的理由。這些功能使他更適合於開發環境,例如對PowerBuilder。下面你可以找到兩者的相對優勢、劣勢。