前言
SVN(Subversion)是一個(gè)自由開源的版本控制系統(tǒng)箩退。當(dāng)公司的開發(fā)團(tuán)隊(duì)在進(jìn)行復(fù)雜的多項(xiàng)目開發(fā)時(shí)囱持,SVN是最好的選擇履婉。
常見的源代碼管理工具
- CVS
- 歷史悠久蚀腿,現(xiàn)在幾乎沒人使用
- SVN
- 集中式版本控制的代表
- CVS的接班人,速度比CVS快舷嗡,功能比CVS強(qiáng)大
- 在國內(nèi)使用率非常高(70%~90%)
- GIT
- 分布式源代碼管理工具
- 目前被大多數(shù)開源項(xiàng)目使用
- 不過在國內(nèi)企業(yè)尚未大規(guī)模普及
源代碼管理工具出現(xiàn)的意義
- 目的
- 為了解決在軟件開發(fā)過程中轴猎,由源代碼引發(fā)的各種繁瑣的問題
- 常見問題
- 無法后悔:做錯(cuò)了一個(gè)操作后,沒有后悔藥可以吃
- 版本備份:費(fèi)空間进萄、費(fèi)時(shí)間
- 版本混亂:因版本備份過多造成混亂税稼,難于找回正確的想要的版本
- 代碼沖突:多人操作同一個(gè)文件(團(tuán)隊(duì)開發(fā)中的常見問題)
- 權(quán)限控制:無法對(duì)源代碼進(jìn)行精確的權(quán)限控制
- 追究責(zé)任:出現(xiàn)了嚴(yán)重的BUG,無法得知是誰干的垮斯,容易耍賴
- 作用
- 能追蹤一個(gè)項(xiàng)目從誕生一直到定案的過程
- 記錄一個(gè)項(xiàng)目的所有內(nèi)容變化
- 方便地查閱特定版本的修訂情況
SVN
- 原理
- 使用環(huán)境
- 要想利用SVN管理源代碼,必須得有2套環(huán)境
- 服務(wù)器
- 用于存儲(chǔ)客戶端上傳的源代碼
- 可以在Windows上安裝Visual SVN Server
- 大部分情況下只祠,公司的開發(fā)人員不必親自搭建SVN服務(wù)器
- 客戶端
- 上傳本地的源代碼到服務(wù)器兜蠕,或者更新服務(wù)器的代碼到本地,保持同步
- 可以在Mac上使用命令行抛寝、Versions熊杨、Cornerstone曙旭、Xcode
- 開發(fā)人員就屬于客戶端這個(gè)角色
- 服務(wù)器
- 要想利用SVN管理源代碼,必須得有2套環(huán)境
- SVN下載地址
安裝
- 第一步
- 雙擊打開VisualSVN-Server-2.7.7.msi
- 第二步
- 同意遵守協(xié)議
- 第三步
- 選擇Visual VSN 服務(wù)器和管理控制臺(tái), 和添加SVN命令行工具到系統(tǒng)Path路徑, 然后下一步
- 第四步
- 選擇版本
- 第五步
- 由于SVN都是在公司內(nèi)網(wǎng)里使用,不存在數(shù)據(jù)被截取的安全問題
- 所以為了速度更快晶府,不要使用https
- 取消勾選 Use secure connection(https://)
- 第六步
- 開始安裝
- 第七步
- 安裝完成后會(huì)詢問你是否需要運(yùn)行
- 第八步
- 安裝成功打開軟件
創(chuàng)建代碼倉庫
- 第一步
- 第二步
- 填寫代碼倉庫的名稱
- 第三步
-
倉庫目錄說明
- db目錄:就是所有版本控制的數(shù)據(jù)存放文件桂躏。
- hooks目錄:腳本文件的目錄。
- locks目錄:用放置hook來放置Subversion文件庫鎖定數(shù)據(jù)的目錄川陆,用來追蹤存取文件庫的客戶端剂习。
- format文件是一個(gè)文本文件,里面只放了一個(gè)整數(shù)较沪,表示當(dāng)前文件庫配置的版本號(hào)鳞绕。
- conf目錄:是這個(gè)倉庫的配置文件(倉庫的用戶訪問帳號(hào)、權(quán)限等)
第四步
添加用戶
訪問SVN服務(wù)器
- 本機(jī)直接訪問
- 如果其他電腦想要訪問倉庫
- 要把倉庫地址的前綴換成電腦的IP
對(duì)比Git
適用對(duì)象不同尸曼。 Git 適用于參與開源項(xiàng)目的開發(fā)者们何。 他們由于水平高,更在乎的是效率而不是易用性控轿。Svn 則不同冤竹, 它適合普通的公司開發(fā)團(tuán)隊(duì)。使用起來更加容易茬射。
使用的場合不同鹦蠕。 Git 適用于通過Internet,有多個(gè)開發(fā)角色的單個(gè)項(xiàng)目開發(fā)躲株, Svn 適合企業(yè)內(nèi)部由項(xiàng)目經(jīng)理統(tǒng)一協(xié)調(diào)的多個(gè)并行項(xiàng)目的開發(fā)片部。
權(quán)限管理策略不同。 Git 沒有嚴(yán)格的權(quán)限管理控制霜定,只要有帳號(hào)档悠,就可以導(dǎo)出、導(dǎo)入代碼望浩,甚至執(zhí)行回退操作辖所。 Svn 則有嚴(yán)格的權(quán)限管理, 可以按組磨德、按個(gè)人進(jìn)行針對(duì)某個(gè)子目錄的權(quán)限控制缘回。區(qū)分讀、寫權(quán)限典挑。更嚴(yán)格的酥宴,不支持回退操作。保證代碼永遠(yuǎn)可以追蹤您觉。
分支( branch )的使用范圍不一樣拙寡。 Git 中, 你只能針對(duì)整個(gè)倉庫作 branch, 而且一旦刪除琳水,便無法恢復(fù)肆糕。而 svn 中般堆, branch 可以針對(duì)任何子目錄,它本質(zhì)上是一個(gè)拷貝操作诚啃。 所以淮摔,可以建立非常多、層次性的 branch, 并且始赎,在不需要時(shí)將其刪除和橙,而以后需要時(shí)只要 checkout 老的 svn 版本就可以了。
基于第三點(diǎn)极阅, Git 適用于單純的軟件項(xiàng)目胃碾,典型的就是一些開源項(xiàng)目,比如 Linux 內(nèi)核筋搏、 busybox 等仆百。相反, Svn 擅長多項(xiàng)目管理奔脐。 比如俄周,你可以在一個(gè) svn 倉庫中存放一個(gè)手機(jī)項(xiàng)目的 bsp/ 設(shè)計(jì)文檔 / 文件系統(tǒng)/ 應(yīng)用程序 / 自動(dòng)化編譯腳本, 或者在一個(gè) svn 中存放 5 款手機(jī)項(xiàng)目的文件系統(tǒng)髓迎。 git 中必須建立 n ( 項(xiàng)目數(shù) )* m (組件數(shù)) 個(gè)倉庫峦朗。 Svn 中只需要最多 n 或者 m 個(gè)就可以了。
Git 使用 128 位 ID 作為版本號(hào)排龄, 而且 checkout 時(shí)要注明是哪個(gè) branch, 而 svn 使用一個(gè)遞增的序列號(hào)作為全局唯一的版本號(hào)波势, 更加簡明易懂。雖然可以使用 git tag 來建立一些文字化的別名橄维,但是畢竟那只是針對(duì)特殊版本尺铣。
可跟蹤性,git 的典型開發(fā)過程為: 建立分支争舞,進(jìn)行開發(fā)凛忿,提交到本地 master,刪除分支竞川。這樣做的后果是以前 的修改 細(xì)節(jié)會(huì)丟失店溢。 而在 svn 下做同樣的事情,不會(huì)丟失任何細(xì)節(jié)委乌。 這里是一個(gè)有趣的鏈接床牧,表明了 git 下典型的工作方式:(以master為核心,不斷創(chuàng)建新branch, 刪除舊branch):
局部更新遭贸,局部還原叠赦。SVN由于是在每個(gè)文件夾建立一個(gè).svn文件夾來實(shí)現(xiàn)管理,所以可以很簡單實(shí)現(xiàn)局部更新或者還原。假如你只希望更新某些部分除秀,則svn可以很好實(shí)現(xiàn)。同時(shí)代碼寫錯(cuò)了算利,同時(shí)可以很好實(shí)現(xiàn)局部還原册踩,當(dāng)然git也可以通過歷史版本還原,但是無法簡單地實(shí)現(xiàn)局部還原效拭。
最后
養(yǎng)成使用源代碼管理工具暂吉,會(huì)讓我們的開發(fā)更加高效。