前言
SVN(Subversion)是一個自由開源的版本控制系統。當公司的開發團隊在進行復雜的多項目開發時,SVN是最好的選擇。
常見的源代碼管理工具
- CVS
- 歷史悠久,現在幾乎沒人使用
- SVN
- 集中式版本控制的代表
- CVS的接班人,速度比CVS快,功能比CVS強大
- 在國內使用率非常高(70%~90%)
- GIT
- 分布式源代碼管理工具
- 目前被大多數開源項目使用
- 不過在國內企業尚未大規模普及
源代碼管理工具出現的意義
- 目的
- 為了解決在軟件開發過程中,由源代碼引發的各種繁瑣的問題
- 常見問題
- 無法后悔:做錯了一個操作后,沒有后悔藥可以吃
- 版本備份:費空間、費時間
- 版本混亂:因版本備份過多造成混亂,難于找回正確的想要的版本
- 代碼沖突:多人操作同一個文件(團隊開發中的常見問題)
- 權限控制:無法對源代碼進行精確的權限控制
- 追究責任:出現了嚴重的BUG,無法得知是誰干的,容易耍賴
- 作用
- 能追蹤一個項目從誕生一直到定案的過程
- 記錄一個項目的所有內容變化
- 方便地查閱特定版本的修訂情況
SVN
- 原理
- 使用環境
- 要想利用SVN管理源代碼,必須得有2套環境
- 服務器
- 用于存儲客戶端上傳的源代碼
- 可以在Windows上安裝Visual SVN Server
- 大部分情況下,公司的開發人員不必親自搭建SVN服務器
- 客戶端
- 上傳本地的源代碼到服務器,或者更新服務器的代碼到本地,保持同步
- 可以在Mac上使用命令行、Versions、Cornerstone、Xcode
- 開發人員就屬于客戶端這個角色
- 服務器
- 要想利用SVN管理源代碼,必須得有2套環境
- SVN下載地址
安裝
- 第一步
- 雙擊打開VisualSVN-Server-2.7.7.msi
- 第二步
- 同意遵守協議
- 第三步
- 選擇Visual VSN 服務器和管理控制臺, 和添加SVN命令行工具到系統Path路徑, 然后下一步
- 第四步
- 選擇版本
- 第五步
- 由于SVN都是在公司內網里使用,不存在數據被截取的安全問題
- 所以為了速度更快,不要使用https
- 取消勾選 Use secure connection(https://)
- 第六步
- 開始安裝
- 第七步
- 安裝完成后會詢問你是否需要運行
- 第八步
- 安裝成功打開軟件
創建代碼倉庫
- 第一步
- 第二步
- 填寫代碼倉庫的名稱
- 第三步
-
倉庫目錄說明
- db目錄:就是所有版本控制的數據存放文件。
- hooks目錄:腳本文件的目錄。
- locks目錄:用放置hook來放置Subversion文件庫鎖定數據的目錄,用來追蹤存取文件庫的客戶端。
- format文件是一個文本文件,里面只放了一個整數,表示當前文件庫配置的版本號。
- conf目錄:是這個倉庫的配置文件(倉庫的用戶訪問帳號、權限等)
第四步
添加用戶
訪問SVN服務器
- 本機直接訪問
- 如果其他電腦想要訪問倉庫
- 要把倉庫地址的前綴換成電腦的IP
對比Git
適用對象不同。 Git 適用于參與開源項目的開發者。 他們由于水平高,更在乎的是效率而不是易用性。Svn 則不同, 它適合普通的公司開發團隊。使用起來更加容易。
使用的場合不同。 Git 適用于通過Internet,有多個開發角色的單個項目開發, Svn 適合企業內部由項目經理統一協調的多個并行項目的開發。
權限管理策略不同。 Git 沒有嚴格的權限管理控制,只要有帳號,就可以導出、導入代碼,甚至執行回退操作。 Svn 則有嚴格的權限管理, 可以按組、按個人進行針對某個子目錄的權限控制。區分讀、寫權限。更嚴格的,不支持回退操作。保證代碼永遠可以追蹤。
分支( branch )的使用范圍不一樣。 Git 中, 你只能針對整個倉庫作 branch, 而且一旦刪除,便無法恢復。而 svn 中, branch 可以針對任何子目錄,它本質上是一個拷貝操作。 所以,可以建立非常多、層次性的 branch, 并且,在不需要時將其刪除,而以后需要時只要 checkout 老的 svn 版本就可以了。
基于第三點, Git 適用于單純的軟件項目,典型的就是一些開源項目,比如 Linux 內核、 busybox 等。相反, Svn 擅長多項目管理。 比如,你可以在一個 svn 倉庫中存放一個手機項目的 bsp/ 設計文檔 / 文件系統/ 應用程序 / 自動化編譯腳本, 或者在一個 svn 中存放 5 款手機項目的文件系統。 git 中必須建立 n ( 項目數 )* m (組件數) 個倉庫。 Svn 中只需要最多 n 或者 m 個就可以了。
Git 使用 128 位 ID 作為版本號, 而且 checkout 時要注明是哪個 branch, 而 svn 使用一個遞增的序列號作為全局唯一的版本號, 更加簡明易懂。雖然可以使用 git tag 來建立一些文字化的別名,但是畢竟那只是針對特殊版本。
可跟蹤性,git 的典型開發過程為: 建立分支,進行開發,提交到本地 master,刪除分支。這樣做的后果是以前 的修改 細節會丟失。 而在 svn 下做同樣的事情,不會丟失任何細節。 這里是一個有趣的鏈接,表明了 git 下典型的工作方式:(以master為核心,不斷創建新branch, 刪除舊branch):
局部更新,局部還原。SVN由于是在每個文件夾建立一個.svn文件夾來實現管理,所以可以很簡單實現局部更新或者還原。假如你只希望更新某些部分,則svn可以很好實現。同時代碼寫錯了,同時可以很好實現局部還原,當然git也可以通過歷史版本還原,但是無法簡單地實現局部還原。
最后
養成使用源代碼管理工具,會讓我們的開發更加高效。