一、SVN原理
(1)運行方式
svn服務器有2種運行方式:獨立服務器和借助apache運行。
1.獨立服務器訪問
訪問地址如:svn://svn.test.com/test
2.借助Apache等http服務
訪問地址如:http://svn.test.com/test
a.單獨安裝Apache+svn
b.CSVN(Apache+SVN)是一個單獨的整合的軟件,帶web界面管理的SVN軟件
3.本地直接訪問
訪問地址如:file:///application/svndata/test
SVN客戶端訪問方式
svn客戶端可以通過多種方式訪問服務器端,例如:本地磁盤訪問,或各種各樣的網絡協議訪問,但是一個版本庫地址永遠都是只有一個URL,URL反映了訪問方法
file:/// 直接通過本地磁盤或者網絡磁盤訪問版本庫
http:// 通過WebDAV協議訪問支持Subversion的Apache服務器
https:// 與http://相似,但是用SSL加密訪問
svn:// 通過TCP/IP自定義協議訪問是SVN服務器
svn+ssh:// 通過認證並加密的TCP/IP自定義協議訪問svn服務器
(2)數據存儲
svn存儲版本數據也有2種方式:BDB(一種事務安全型表類型)和FSFS(一種不需要數據庫的存儲系統)。因為BDB方式在服務器中斷時,有可能鎖住數據,所以還是FSFS方式更安全一點。
BDB:
伯克利DB(Berkeley DB),版本庫可以使用的一種經過充分測試的后台數據庫實現,不能再通過網絡共享的文件系統上使用,伯克利DB是Subversion1.2版本以前的缺省版本庫格式
FSFS:
一個專用於Subversion版本庫的文件系統后端,可以使用網絡文件系統(例如:NFS或SMBFS)。是1.2版本及以后的缺省版本庫格式。
svn是基於關系型數據庫的BDB或一系列二進制文件的FSFS。這解決了許多問題(如:並行讀寫共享文件)以及添加了許多新功能(如:運行時的事物特性)。然而另一方面,數據存儲由此變得不透明,不能像ftp,samba,nfs等能看到實體的文件。
(3)工作原理
SVN是一個增量式的版本控制,它不會講各個版本的副本都完整的保存下來,而只會記錄下版本之間的差異,然后按照順序更新或者恢復特定版本的數據。這使得服務端的存儲量會非常低。
集中式代碼管理的核心是SVN服務器,開發者在開始新一天工作之前必須現在本地update一下代碼,然后開發、解決沖突、合並。所有的版本信息都放在SVN上面。
二、SVN與GIT的區別
(1)SVN是集中式版本控制系統
SVN版本控制系統是集中式的數據管理,存在一個中央版本庫,所有開發人員本地開發所使用的代碼都是來自於這個版本庫,提交代碼也必須提交到這個中央版本庫。
優點:
- 對於某些項目的核心代碼或者是一些重要的保密性要求較高的項目,svn比git更適合。
- svn支持空目錄
- svn有更好的windows平台支持
- svn可以check out/clone一個子樹(sub-tree)
- svn支持特權訪問控制svn lock,在處理很難合並的文件時非常有用
- svn支持二進制文件,更容易處理大文件(不需要把老版本拷來拷去)
- 學習簡單、使用簡單
缺點:
- 無網的情況下:無法提交代碼,無法查看代碼的歷史版本、無法同步代碼
- 代碼要定期做備份(所有的代碼數據及版本變更記錄)
- 分支切換緩慢
- 由於每次提交都會保留一個原始副本,因此SVN的數據庫容量會暴增。尤其是在開發人員非常多的情況下。
(2)GIT是分布式版本控制系統
git沒有中央版本庫,但是為了方便開發小組的成員們進行代碼共享,通常會搭建一個遠程的git倉庫。和svn不同的是開發者本地也包含一個完整的git倉庫,從某種程度上來說本地的倉庫和遠程的倉庫在身份上是等價的,沒有主從。
優點:
- 比svn方便和快捷的切換分支
- 書寫的代碼可以隨時提交
- 豐富的命令行操作和組合
- 可以一人一個倉庫,倉庫可以有多個分支
缺點:
- 沒有一個較好的桌面集成工具
- 不支持二進制文件
- 學習成本高