面試中SVN管理知識(shí)點(diǎn)全面剖析
本節(jié)講解一下SVN管理問題,在學(xué)習(xí)SVN的過程中,你可能會(huì)遇到SVN管理問題,只有掌握了SVN管理你才能夠?qū)VN運(yùn)用自如,歡迎大家一起來學(xué)習(xí)SVN管理。下面我們來看一下具體介紹。
一.SVN的工作模型:Subversion缺省使用復(fù)制-修改-合并模型
實(shí)際上是文件共享的問題,目前有兩種策略:
A.鎖定-修改-解鎖模型有一點(diǎn)問題就是限制太多,經(jīng)常會(huì)成為用戶的障礙:
鎖定可能導(dǎo)致管理問題。有時(shí)候Harry會(huì)鎖住文件然后忘了此事,這就是說Sally一直等待解鎖來編輯這些文件,她在這里僵住了。然后Harry去旅行了,現(xiàn)在Sally只好去找管理員放開鎖,這種情況會(huì)導(dǎo)致不必要的耽擱和時(shí)間浪費(fèi)。
鎖定可能導(dǎo)致不必要的線性化開發(fā)。如果Harry編輯一個(gè)文件的開始,Sally想編輯同一個(gè)文件的結(jié)尾,這種修改不會(huì)沖突,設(shè)想修改可以正確的合并到一起,他們可以輕松的并行工作而沒有太多的壞處,沒有必要讓他們輪流工作。
鎖定可能導(dǎo)致錯(cuò)誤的安全狀態(tài)。假設(shè)Harry鎖定和編輯一個(gè)文件A??Sally鎖定并編輯文件B,如果A和B互相依賴,這種變化是必須同時(shí)作的,這樣A和B不能正確的工作了,鎖定機(jī)制對(duì)防止此類問題將無能為力—從而產(chǎn)生了一種處于安全狀態(tài)的假相。很容易想象Harry和Sally都以為自己鎖住了文件,而且從一個(gè)安全,孤立的情況開始工作,因而沒有盡早發(fā)現(xiàn)他們不匹配的修改。
B.復(fù)制-修改-合并(CVS,SVN采用)
在這種模型里,每一個(gè)客戶讀取項(xiàng)目版本庫(kù)建立一個(gè)私有工作副本—版本庫(kù)中文件和目錄的本地映射。用戶并行工作,修改各自的工作副本,最終,各個(gè)私有的復(fù)制合并在一起,成為最終的版本,這種系統(tǒng)通??梢暂o助合并操作,但是最終要靠人工去確定正誤。
二。分支的概念
我們?cè)賮砜匆幌耂VN管理中分支的概念。版本控制系統(tǒng)的一個(gè)特性是能夠把各種修改分離出來放在開發(fā)品的一個(gè)分割線上。這條線被稱為分支。分支經(jīng)常被用來試驗(yàn)新的特性,而不會(huì)對(duì)開發(fā)有編譯錯(cuò)誤的干擾。當(dāng)新的特性足夠穩(wěn)定之后,開發(fā)品的分支就可以混合回主分支里(主干線).
版本控制系統(tǒng)的另一個(gè)特性是能夠標(biāo)記特殊的版本(例如某個(gè)發(fā)布版本),所以你可以在任何時(shí)候重新建立一個(gè)特定的構(gòu)件和環(huán)境。這個(gè)過程被稱作標(biāo)記。
分支中最重要的概念就是獨(dú)立于主干進(jìn)行開發(fā),在合并前,不同分支提交的代碼互相不可見,互不干擾。但是主干持有所有分支的版本記錄,因此主干可以合并分支。比較適用不同團(tuán)隊(duì)獨(dú)立開發(fā)各自模塊。另外在分支合并的時(shí)候需要做回歸測(cè)試
三。版本庫(kù)的布局
SVN管理中版本庫(kù)的布局情況,svn文檔是有推薦的目錄結(jié)構(gòu),適用大多數(shù)情況:)當(dāng)然理解了分支的概念,心中有劍也無需受此限制。
- Therearesomestandard,recommendedwaystoorganizearepository
- .Mostpeoplecreateatrunkdirectorytoholdthe“mainline”ofdevelopment,abranchesdirectorytocontainbranchcopies
- ,andatagsdirectorytocontaintagcopies.Ifarepositoryholdsonlyoneproject
- ,thenoftenpeoplecreatethesetop-leveldirectories:
如果一個(gè)版本庫(kù)包含多個(gè)項(xiàng)目,人們通常按分支來安排布局:
大致用法如下:
traceview項(xiàng)目有兩個(gè)開發(fā)人員wya,htyoung,同時(shí)htyoung做為項(xiàng)目管理員.
1.項(xiàng)目開始時(shí)htyoung在trunk創(chuàng)建了最初的文件這個(gè)作為mainline,然后用
svncptrunktags/first_init
svncptags/first_initbranches/wya
svncptags/first_initbranches/htyoung
創(chuàng)建工作文件夾,我們的開發(fā)人員wya,htyoung只在他們的開發(fā)文件夾branches/wya,branches/htyoung內(nèi)工作,也就是commit.
2.一段時(shí)間后由項(xiàng)目管理員(htyoung),merge所有的修改到主線trunk上,同時(shí)htyoung和wya同主線同步.
3.再過一段時(shí)間我們發(fā)布0.1版本,為了有一個(gè)記錄項(xiàng)目管理員(htyoung)用以下命令建了一個(gè)tags
svncptrunktags/Release0.1.0
4.這時(shí)又有一個(gè)開發(fā)人員JRD來了,項(xiàng)目管理員(htyoung)基于0.1給她建了一個(gè)工作分支svncptags/Release0.1.0branches/jrd
5.在我們發(fā)布完0.2時(shí)來了一個(gè)測(cè)試員TA,我們用以下命令為TA建一個(gè)工作文件夾
svncptrunktags/Release0.2.0
svncptags/Release0.2.0branches/ta。本節(jié)SVN管理問題講解完畢。
【編輯推薦】