常見的源代碼管理工具
- 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也可以通過歷史版本還原,但是無法簡單地實現局部還原。