軟件配置管理課件:第8章 Subversion_第1頁
軟件配置管理課件:第8章 Subversion_第2頁
軟件配置管理課件:第8章 Subversion_第3頁
軟件配置管理課件:第8章 Subversion_第4頁
軟件配置管理課件:第8章 Subversion_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第8章SVN-SubversionSubversion簡介版本控制的基本原理Subversion基礎(chǔ)Subversion基本工作流程及基本操作CheckOut,Commit,Update,StatusSubversion高級操作

Branch/Tag,MergeTortoiseSVN基本操作內(nèi)容Subversion簡介Subversion的作用Subversion的歷史Subversion的特性Subversion的架構(gòu)Subversion的作用一個自由、開源的版本控制系統(tǒng)不是一個簡單的SCM系統(tǒng)以替代CVS為目標(biāo)可以管理任何類型文件,并且追蹤變更不具有某些和開發(fā)緊密結(jié)合的特性,如支持某種特定的編程語言,集成構(gòu)建工具等官方網(wǎng)址:Subversion的歷史2000年,CollabNet公司開始尋找CVS的替代產(chǎn)品2月,這個公司聯(lián)系了OpenSourceDevelopmentwithCVS的作者KarlFogel,他同意為這個項(xiàng)目工作。同時,他還聯(lián)系了其他幾個人一起開發(fā)這個新系統(tǒng)3月,Subversion開始詳細(xì)設(shè)計(jì)和編碼2001年8月31日,Subversion第一個完整版本問世經(jīng)過1.0,1.1,1.2直到現(xiàn)在的1.6.13版Subversion的特性(和CVS比較)和CVS的相似性目錄的版本化更加好的文件版本管理(例如對文件拷貝,重命名的處理)提交的原子性元數(shù)據(jù)的版本化可選的網(wǎng)絡(luò)層對文本文件和二進(jìn)制文件一致的差異比較算法高效的分支(branch)和標(biāo)簽(tag)操作良好的可維護(hù)性Subversion的架構(gòu)版本控制的基本原理客戶/服務(wù)器架構(gòu)的版本控制簡述版本控制的數(shù)據(jù)共享模型數(shù)據(jù)共享的問題鎖定-修改-解鎖方案拷貝-修改-合并方案沖突及解決兩種方案的對比及選擇Subversion的實(shí)現(xiàn)客戶/服務(wù)器架構(gòu)的版本控制版本庫(Repository):按照一定格式存儲了所有數(shù)據(jù),包括文件和目錄經(jīng)過授權(quán)的客戶端可以連接到版本庫,讀寫庫中的文件版本庫和普通文件服務(wù)器的不同:版本庫會記錄每一次的更改,所以,客戶端可以任意查詢更改的歷史。例如:ApplicationContext.java的1451版和1450版相比修改了什么?誰作的修改?什么時候作的修改?等等版本控制數(shù)據(jù)共享模型版本控制系統(tǒng)的核心任務(wù):協(xié)作編輯和數(shù)據(jù)共享基礎(chǔ)問題:怎樣允許用戶共享信息,并且不會因意外而互相干擾?數(shù)據(jù)共享問題的產(chǎn)生解決辦法數(shù)據(jù)共享問題解決方案1——鎖定-修改-解鎖方案鎖定-修改-解鎖方案的問題可能導(dǎo)致管理問題,如長期鎖定文件不放會導(dǎo)致不必要的按順序開發(fā)可能導(dǎo)致死鎖例如Sally和Harry都需要修改plugin_mgr.c和plugin_mgr.h,兩者互相關(guān)聯(lián),Sally鎖定了.c文件而Harry鎖定了頭文件,就會進(jìn)入死鎖狀態(tài)解決方案2——拷貝-修改-合并方案(續(xù)圖……)沖突(Conflict)及解決(Resolve)沖突的產(chǎn)生:沖突是隨著拷貝-修改-合并方案的產(chǎn)生而帶來的問題。兩個開發(fā)者使用拷貝-修改-合并方案編輯同一個文件,并且兩人的修改發(fā)生了交疊時就發(fā)生了沖突沖突的解決:當(dāng)沖突發(fā)生時,開發(fā)者會看到一對沖突的修改結(jié)果,通常情況下,必須讓引起沖突的兩個人商議之后,手動選擇保留一組更改。在這里,版本控制系統(tǒng)只能提示沖突的發(fā)生而無法給出解決建議沖突的預(yù)防:增加開發(fā)者的交流可以最大限度減少沖突的發(fā)生,但是不可能杜絕沖突兩種方案的對比及選擇雖然鎖定-修改-解鎖方案有很多的弊端,但在一些情況下仍然是必須的;雖然拷貝-修改-合并模型能解決大多數(shù)問題,但它也不是萬能的比較:文本文件和二進(jìn)制文件的特點(diǎn)選擇:拷貝-合并模型假定文件是可以通過上下文合并的。通常情況下,文本文件(例如源代碼以及用純文本,HTML,TXT等格式保存的文檔)因?yàn)槠鋬?nèi)部結(jié)構(gòu)直觀可知,容易理解上下文,所以用拷貝-合并方案較好。而二進(jìn)制文件(例如MicrosoftWord格式,PDF等格式保存的文檔及圖片,聲音,可執(zhí)行文件,庫等)內(nèi)部結(jié)構(gòu)復(fù)雜,且不容易理解更改處的上下文,采用鎖定-解鎖方案較好Subversion的實(shí)現(xiàn)Subversion主要采用拷貝-修改-合并模型,配合鎖定-修改-解鎖模型管理數(shù)據(jù)的共享Subversion基礎(chǔ)基本概念工作拷貝(WorkingCopy)修訂版本(Revision)文件狀態(tài)混合修訂版本的工作拷貝工作拷貝(WorkingCopy)工作拷貝是本地機(jī)器的一個普通的目錄。這個目錄的內(nèi)容是版本庫中某個目錄的拷貝。工作拷貝是私有工作區(qū),可以任意編輯里面的文件并且發(fā)布更改通常,一個工作拷貝對應(yīng)于版本庫的一個子目錄,日常的開發(fā)是針對工作拷貝進(jìn)行的工作拷貝里面還有一些由Subversion創(chuàng)建和維護(hù)的額外文件,用于命令的協(xié)助執(zhí)行,所以它們又叫工作拷貝管理目錄。通常,它們都保存在工作拷貝目錄及子目錄下的.svn目錄(隱藏)中,憑借這個目錄中保存的信息,Subversion可以識別哪一個文件被修改了,哪一個文件已經(jīng)過時了,等等修訂版本(Revision)SVN的提交(Commit)操作是把工作拷貝的更改發(fā)布到版本庫的一個原子操作。每當(dāng)一次提交完成后,版本庫的文件系統(tǒng)就進(jìn)入了一個新的狀態(tài),叫做一次修訂(Revision),每一次修訂都會賦予一個獨(dú)一無二的版本號,一般是從0開始的遞增自然數(shù),一個比一個大初始修訂版本是0,這只是一個空目錄,沒有任何內(nèi)容。隨著每次的提交,版本庫里仿佛就多了一個當(dāng)前內(nèi)容的“快照”。在版本庫中,最新的一個修訂版本稱為HEAD修訂版本(圖示)(HEAD)文件狀態(tài)對于工作拷貝的每一個文件,SVN在管理目錄(.svn)記錄兩項(xiàng)關(guān)鍵的信息該文件作為基準(zhǔn)的修訂版本(叫做文件的工作修訂版本)該文件最后更新的時間戳根據(jù)以上兩項(xiàng)關(guān)鍵信息,通過和版本庫通訊,SVN可以得到工作拷貝中一個文件的狀態(tài),它有下面幾種可能未修改,并且版本庫也未修改(Up-to-date狀態(tài))已修改,但是版本庫沒有修改(Modified狀態(tài))未修改,但是版本庫已經(jīng)修改已修改,并且版本庫也已修改(需要合并)可以用svnstatus命令查看文件狀態(tài)混合修訂版本的工作拷貝很靈活,但是比較難理解的一個特性混合修訂版的工作拷貝:為了靈活,允許一個工作拷貝中存在多個修訂版本的文件SVN特性:修訂版本號的全局性。如果某文件的修訂號為N,并不意味這這個文件被提交了N次(甚至有可能這個文件只修改過1次),而意味著整個版本庫被提交了N次當(dāng)一次Checkout或者(整個工作拷貝的)Update操作完成后,工作拷貝中所有文件都會被更新到同一個版本號兩個操作可能引起混合版本的情況:提交和部分更新混合修訂版本的工作拷貝(續(xù))提交會引起混合修訂版本的情況SVN的原則:提交某個修改的過程不會導(dǎo)致工作拷貝被修改。在SVN中,更新和提交是分開的。當(dāng)提交修改時,被提交修改的文件版本號將遞增,但是工作拷貝中的其他文件仍然保持原有版本號,于是就形成了混合修訂版本的格局?;旌闲抻啺姹镜墓ぷ骺截悾ɡm(xù))很顯然,(部分)更新也可能會引起這種情況部分更新是指對工作拷貝中某個文件或者子目錄的更新操作(不限于更新到HEAD)很靈活的一個特性混合修訂版本的工作拷貝(續(xù))混合修訂版本是一種正常的情況同時,混合修訂版本很有用例如,可以用來追溯Bug的源頭,或者確定某個特性在某個歷史版本中是否具有會影響某些命令,如Log例如,當(dāng)前HEAD版本號為2007,而你由于做了很多提交操作,但一直沒有做更新操作,導(dǎo)致雖然最新的文件版本號已經(jīng)是2007,但是仍然有文件版本號只有1937,當(dāng)你對這個文件用log命令想查看歷史記錄,會發(fā)現(xiàn)這個文件的歷史到1937就為止了混合版本有限制:不是最新的不能提交Subversion基本工作流程和基本操作Subversion的基本工作流程是:Subversion基本工作流程和基本操作(續(xù))基本命令CheckOutUpdateStatus/LogCommitSVN的幫助,用svnhelp

命令名稱可以得到命令的幫助,或者查看man手冊和info頁。Windows環(huán)境下可以查看Subversion帶的CHM格式參考資料,一般help命令就足夠了CheckOut操作從版本庫中取出某個目錄的拷貝到本機(jī)上某個目錄的操作叫做CheckOut,這個操作是工作的基礎(chǔ)語法:checkout(co)URL[@REV]...[PATH]注:省略svn,即完整的命令應(yīng)該是svncheckout…例1:svncosvn:///svnrepos/skizcorp/trunk

在當(dāng)前目錄建立一個trunk目錄,里面是工作拷貝例2:svncosvn://localhost/tormI:\PROJECTS\torm

會在I:\PROJECTS\目錄下創(chuàng)建torm目錄,里面存放工作拷貝例2的命令較為常用,因?yàn)榇蠖鄶?shù)情況下,我們并不想把工作拷貝目錄命名為trunkCheckOut操作(續(xù))指明Checkout的版本號默認(rèn)CheckOut操作是針對HEAD版本進(jìn)行的,大多數(shù)情況下我們需要HEAD版本,但如果需要?dú)v史版本,可以用-r(--revision)參數(shù)或者是用“@版本號”的形式例:… -r1452會檢出1452版,如果存在的話

… -r{“2007-05-05”}會檢出最接近這個日期的 版本

…/trunk@1452效果同第1個例子遞歸與不遞歸-N:不遞歸(僅針對頂層目錄),否則目錄遞歸(默認(rèn),常用)注:上面兩個參數(shù)-r、–N在很多命令里面都用到Update操作把版本庫的修改同步到本地的過程是Update語法:update(up)[PATH...]例1:up 直接把工作拷貝更新到最新版(HEAD版)例2:up-r2007 更新到2007版例3:updoc/design 只更新doc/design下的文件-r和-N參數(shù)仍然有用Update會修改被更新目錄的BASE版本號文件狀態(tài)BASE版:某個文件的BASE版本是指存放在管理目錄.svn中的該文件拷貝的版本,Revert會使該文件回到BASE版本做Update操作時,SVN會打印出受影響文件的狀態(tài),有以下幾種:AAddedDDeletedUUpdatedCConflictGMerged若提示C,表示沖突,沖突可以用status命令加-u參數(shù)來預(yù)測Revert操作——時光倒流所謂Revert,是指放棄對某個文件的修改,把該文件的內(nèi)容回復(fù)和BASE版本相同,也就是,把該文件的狀態(tài)回復(fù)到未修改狀態(tài)語法:revert文件/路徑例子例1revertabc.c丟棄對abc.c的所有修改例2revertsrc/edu/nju/pojo放棄對此目錄下所有文件的修改沖突解決當(dāng)文件發(fā)生沖突時,SVN會額外創(chuàng)建3個不受版本控制的文件,同時被沖突文件如果能夠合并,會在被沖突文件內(nèi)部留下沖突記錄。例如,沖突的文件為plugin.c,BASE版本是1458,HEAD為1459,會產(chǎn)生3個臨時文件plugin.c.mine,plugin.c.r1458,plugin.c.r1459,解決思路:A.手動修改被沖突文件B.放棄自己的更改實(shí)際中,解決辦法很靈活,一般需要與他人商量注意:由于這3個文件是在Update后才創(chuàng)建的,而Update之后,工作拷貝的BASE目錄已經(jīng)變成更新后的版本了,所以放棄自己的更改會回到新版本如果不是用Revert的方法解決沖突的話,由于那3個臨時文件留在那里,會使Subversion認(rèn)為沖突沒有解決,所以要運(yùn)行resolved命令告訴SVN沖突解決或者刪除臨時文件工作拷貝中對文件的操作把一個文件加入SVN版本控制系統(tǒng),用add命令從版本控制系統(tǒng)中移除,用delete(rm,remove)命令移動或者重命名,用move(rename)命令拷貝,用copy命令創(chuàng)建目錄,用mkdir命令注意:盡量不要用操作系統(tǒng)提供的命令管理文件,這樣Subversion不知道更改檢驗(yàn)修改通過status命令可以檢查工作拷貝的狀態(tài)通過diff命令可以檢查更改的內(nèi)容注意:SVN對文件屬性的更改和文件內(nèi)容的更改是分開管理的提交修改一般在提交修改之前,必須運(yùn)行一下update操作來合并別人作出的新更改。提交用commit命令--message參數(shù):說明本次提交的有關(guān)信息,如為什么要作出這個修改等等。Subversion高級操作SVN的高級操作主要包括分支(Branch/Tag)以及合并(Merge)操作分支操作切換URL合并操作為什么需要分支?你在開發(fā)一個軟件,基于Windows平臺。有一天,老板找到你,希望你把這個軟件移植到Linux平臺下,同時又不放棄原有版本,怎么管理代碼?你的產(chǎn)品即將發(fā)布,需要進(jìn)行一段時間的Alpha以及Beta測試直至正式版Release。同時,市場的競爭迫使你必須馬不停蹄的開發(fā)下一個新版本,增加許多新的特性。兩個工作必須同時進(jìn)行,怎么管理代碼?什么是分支?什么是分支?分支的概念從圖中可以看到,分支(Branch)是開發(fā)的一條“支線”。它獨(dú)立于其他開發(fā)的線路,并且和其他線路并行開發(fā)但是,所有的分支都有共同的歷史,有著原先共同的主線(Trunk)創(chuàng)建分支創(chuàng)建分支使用copy命令語法:copy源目錄目標(biāo)目錄方法方法1:先把目錄checkout到本地,在本地執(zhí)行copy命令后提交至版本庫

例:svncosvn://localhost/

svncopytrunk/branches/mybranch

svncommit–m“Mybranchcreated”方法2:直接用copy命令對版本庫中兩個URL進(jìn)行操作

例:svncopysvn://localhost/trunksvn://localhost/branches/mybranch–m“Mybranch”創(chuàng)建分支前后版本庫的變化之前之后在分支上工作要想在分支上工作,需要一個對應(yīng)于分支的工作拷貝。有兩種方法可以獲得這種工作拷貝方法1:直接從分支的URL上checkout出工作拷貝(適用于沒有工作拷貝的情況)方法2:使用switch命令切換工作拷貝對應(yīng)的URL(在有工作拷貝的基礎(chǔ)上)Switch操作Switch操作可以使工作拷貝在不同的分支之間或者在位于不同服務(wù)器上相同的版本庫的分支間切換。它的作用是改變工作拷貝對應(yīng)的URLSwitch&Update:Update命令是Switch命令的一個子集語法:switch[--relocate]目標(biāo)URL慎用-relocate選項(xiàng)分支的合并——Merge操作Merge操作能夠處理目錄樹的修改,而不限于單個文件內(nèi)容語法:merge初始版本樹最終版本樹目標(biāo)常用語法:merge初始版本:最終版本版本庫URL目標(biāo)作用:取出初始版本到最終版本的修改,然后把它應(yīng)用到當(dāng)前工作拷貝例子mergesvn://localhost/trunk@2000svn://localhost/trunk@2007my_wcmerge–r2000:2007svn://localhost/trunkmy_wcSVN版本庫常用目錄組織結(jié)構(gòu)SVN版本庫常用目錄組織結(jié)構(gòu)SVN中tag和branch的區(qū)別tag:通常tag對應(yīng)于milestone,是一個完整可用的版本,不能修改,是只讀的bran

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論