問題:html
SVN(Subversion)是近年來崛起的很是優秀的版本管理工具,與CVS管理工具同樣,SVN是一個跨平臺開源的版本控制系統。SVN版本管理工具管理着隨時間改變的各類數據。這些數據放置在一箇中央資料檔案庫(repository)中,這個檔案庫很像一個普通的文件服務器或者FTP服務器。與其餘服務器不一樣的是,SVN會備份記錄每一個文件每一次的修改變更。這樣咱們就能夠把任意一個時間點的檔案回覆到想要的某一箇舊的版本,也能夠直接瀏覽指定文件的更新歷史記錄。nginx
爲何會有SVN這樣一個項目?git
官方解釋:爲了接管CVS的用戶基礎,確切的說,咱們寫了一個新的版本控制系統,他和CVS很類似,可是它修正了CVS所沒有解決的問題。詳情見官網。web
SVN是一個很是通用的軟件管理系統,它常被用來管理程序源碼,可是它也能夠管理任何類型的文件,如文本、視頻,圖片等等。數據庫
SVN相關站點:apache
Subversion官網:https://subversion.apache.orgwindows
SVN客戶端:http://tortoisesvn.sourceforge.net/後端
SVN中文網站:http://svndoc.iusesvn.com/安全
中文常見問題解答:https://subversion.apache.org/faq.zh.html服務器
截止當前常見的版本管理軟件有:VSS、CVS、StarTeam、SVN、GIT。
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的數據庫容量會暴增。尤爲是在開發人員很是多的狀況下。
工做模式:
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.獨立服務器訪問
訪問地址如:svn://svn.test.com/test
2.藉助Apache等http服務
訪問地址如:http://svn.test.com/test
a.單獨安裝Apache+svn
b.CSVN(Apache+SVN)是一個單獨的整合的軟件,帶web界面管理的SVN軟件
3.本地直接訪問
svn客戶端能夠經過多種方式訪問服務器端,例如:本地磁盤訪問,或各類各樣的網絡協議訪問,可是一個版本庫地址永遠都是隻有一個URL,URL反映了訪問方法
訪問方式 | 說明 |
file:/// | 直接經過本地磁盤或者網絡磁盤訪問版本庫 |
http:// | 經過WebDAV協議訪問支持Subversion的Apache服務器 |
https:// | 與http://類似,可是用SSL加密訪問 |
svn:// | 經過TCP/IP自定義協議訪問是SVN服務器 |
svn+ssh:// | 經過認證並加密的TCP/IP自定義協議訪問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等能看到實體的文件。
集中式代碼管理的核心是SVN服務器,開發者在開始新一天工做以前必須如今本地update一下代碼,而後開發、解決衝突、合併。全部的版本信息都放在SVN上面。