subversion簡(jiǎn)易教程 - 1_第1頁(yè)
已閱讀1頁(yè),還剩50頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、自由、開源的版本管理系統(tǒng),南京大學(xué)軟件學(xué)院2009,1,1 Subversion簡(jiǎn)介2 版本控制的基本原理3 Subversion基礎(chǔ)4 Subversion基本工作流程及基本操作CheckOut,Commit,Update,Status5 Subversion高級(jí)操作Branch/Tag,Merge6 Subversion其他操作(演示)7 常見Subversion的GUI客戶端使用(演示),內(nèi)容簡(jiǎn)介

2、,1 Subversion簡(jiǎn)介,Subversion的作用Subversion的歷史Subversion的特性Subversion的架構(gòu),Subversion的作用,一個(gè)自由,開源的版本控制系統(tǒng)一個(gè)通用系統(tǒng),不是簡(jiǎn)單的一個(gè)SCM系統(tǒng)以替代CVS為目標(biāo)可以管理任何類型文件,并且追蹤變更不具有某些和開發(fā)緊密結(jié)合的特性,如支持某種特定的編程語言,集成構(gòu)建工具等應(yīng)用:版本管理,網(wǎng)絡(luò)硬盤??網(wǎng)址:http://subversi

3、on.tigris.org,Subversion的歷史,2000年,CollabNet公司開始尋找CVS的替代產(chǎn)品2月,這個(gè)公司聯(lián)系了Open Source Development with CVS的作者Karl Fogel,他同意為這個(gè)項(xiàng)目工作。同時(shí),他還聯(lián)系了其他幾個(gè)人一起開發(fā)這個(gè)新系統(tǒng)3月,Subversion開始詳細(xì)設(shè)計(jì)和編碼2001年8月31日,Subversion第一個(gè)完整版本問世經(jīng)過1.0,1.1,1.2直到現(xiàn)在的

4、1.4.3版,Subversion的特性(和CVS比較),和CVS的相似性目錄的版本化更加好的文件版本管理(例如對(duì)文件拷貝,重命名的處理)提交的原子性元數(shù)據(jù)的版本化可選的網(wǎng)絡(luò)層對(duì)文本文件和二進(jìn)制文件一致的差異比較算法高效的分支(branch)和標(biāo)簽(tag)操作良好的可維護(hù)性,Subversion的架構(gòu),,2 版本控制的基本原理,客戶/服務(wù)器架構(gòu)的版本控制簡(jiǎn)述版本控制的數(shù)據(jù)共享模型數(shù)據(jù)共享的問題鎖定-修改-解鎖方

5、案拷貝-修改-合并方案沖突及解決兩種方案的對(duì)比及選擇Subversion的實(shí)現(xiàn),客戶/服務(wù)器架構(gòu)的版本控制,,版本庫(kù)(Repository):按照一定格式存儲(chǔ)了所有數(shù)據(jù),包括文件和目錄經(jīng)過授權(quán)的客戶端可以連接到版本庫(kù),讀寫庫(kù)中的文件版本庫(kù)和普通文件服務(wù)器的不同:版本庫(kù)會(huì)記錄每一次的更改,所以,客戶端可以任意查詢更改的歷史。例如:ApplicationContext.java的1451版和1450版相比修改了什么?誰作的修改?

6、什么時(shí)候作的修改?等等,版本控制數(shù)據(jù)共享模型,版本控制系統(tǒng)的核心任務(wù):協(xié)作編輯和數(shù)據(jù)共享基礎(chǔ)問題:怎樣允許用戶共享信息,并且不會(huì)因意外而互相干擾?數(shù)據(jù)共享問題的產(chǎn)生解決辦法,數(shù)據(jù)共享問題,,解決方案1——鎖定-解鎖方案,,鎖定-解鎖方案的問題,可能導(dǎo)致管理問題,如長(zhǎng)期鎖定文件不放會(huì)導(dǎo)致不必要的順序開發(fā)可能導(dǎo)致死鎖例如Sally和Harry都需要修改plugin_mgr.c和plugin_mgr.h,兩者互相關(guān)聯(lián),Sally鎖

7、定了.c文件而Harry鎖定了頭文件,就會(huì)進(jìn)入死鎖狀態(tài),解決方案2——拷貝-修改-合并方案,,(續(xù)圖……),,沖突(Conflict)及解決(Resolve),沖突的產(chǎn)生:沖突是隨著拷貝-修改-合并方案的產(chǎn)生而帶來的問題。兩個(gè)開發(fā)者使用拷貝-修改-合并方案編輯同一個(gè)文件,并且兩人的修改發(fā)生了交疊時(shí)就發(fā)生了沖突沖突的解決:當(dāng)沖突發(fā)生時(shí),開發(fā)者會(huì)看到一對(duì)沖突的修改結(jié)果,通常情況下,必須讓引起沖突的兩個(gè)人商議之后,手動(dòng)選擇保留一組更改。在這

8、里,版本控制系統(tǒng)只能提示沖突的發(fā)生而無法給出解決建議沖突的預(yù)防:增加開發(fā)者的交流可以最大限度減少?zèng)_突的發(fā)生,但是不可能杜絕沖突后面可以看到?jīng)_突的具體例子以及解決辦法,兩種方案的對(duì)比及選擇,雖然鎖定-解鎖方案有很多的弊端,但在一些情況下仍然是必須的;雖然拷貝-修改-合并模型能解決大多數(shù)問題,但它也不是萬能的比較:文本文件和二進(jìn)制文件的特點(diǎn)選擇:拷貝-合并模型假定文件是可以通過上下文合并的。通常情況下,文本文件(例如源代碼以及用純文

9、本,HTML,TeX等格式保存的文檔)因?yàn)槠鋬?nèi)部結(jié)構(gòu)直觀可知,容易理解上下文,所以用拷貝—合并方案較好。而二進(jìn)制文件(例如用Microsoft Word格式,PDF等格式保存的文檔及圖片,聲音,可執(zhí)行文件,庫(kù)等)內(nèi)部結(jié)構(gòu)復(fù)雜,且不容易理解更改處的上下文,采用鎖定-解鎖方案較好,Subversion的實(shí)現(xiàn),Subversion主要采用拷貝-修改-合并模型,配合鎖定-解鎖模型管理數(shù)據(jù)的共享,3 Subversion基礎(chǔ),基本概念工作拷貝

10、(Working Copy)修訂版本(Revision)文件狀態(tài)混合修訂版本的工作拷貝,工作拷貝(Working Copy),工作拷貝是本地機(jī)器的一個(gè)普通的目錄。這個(gè)目錄的內(nèi)容是版本庫(kù)中某個(gè)目錄的拷貝。工作拷貝是私有工作區(qū),可以任意編輯里面的文件并且發(fā)布更改通常,一個(gè)工作拷貝對(duì)應(yīng)于版本庫(kù)的一個(gè)子目錄,日常的開發(fā)是針對(duì)工作拷貝進(jìn)行的工作拷貝里面還有一些由Subversion創(chuàng)建和維護(hù)的額外文件,用于命令的協(xié)助執(zhí)行,所以它們又叫工

11、作拷貝管理目錄。通常,它們都保存在工作拷貝目錄及子目錄下的.svn目錄(隱藏)中,憑借這個(gè)目錄中保存的信息,Subversion可以識(shí)別哪一個(gè)文件被修改了,哪一個(gè)文件已經(jīng)過時(shí)了,等等,修訂版本(Revision),SVN的提交(Commit)操作是把工作拷貝的更改發(fā)布到版本庫(kù)的一個(gè)原子操作。每當(dāng)一次提交完成后,版本庫(kù)的文件系統(tǒng)就進(jìn)入了一個(gè)新的狀態(tài),叫做一次修訂(Revision),每一次修訂都會(huì)賦予一個(gè)獨(dú)一無二的版本號(hào),一般是從0開始的

12、遞增自然數(shù),一個(gè)比一個(gè)大初始修訂版本是0,這只是一個(gè)空目錄,沒有任何內(nèi)容。隨著每次的提交,版本庫(kù)里仿佛就多了一個(gè)當(dāng)前內(nèi)容的“快照”。在版本庫(kù)中,最新的一個(gè)修訂版本稱為HEAD,修訂版本(圖示),,(HEAD),文件狀態(tài),對(duì)于工作拷貝的每一個(gè)文件,SVN在管理目錄(.svn)記錄兩項(xiàng)關(guān)鍵的信息該文件作為基準(zhǔn)的修訂版本(叫做文件的工作修訂版本)該文件最后更新的時(shí)間戳根據(jù)以上兩項(xiàng)關(guān)鍵信息,通過和版本庫(kù)通訊,SVN可以得到工作拷貝中一個(gè)

13、文件的狀態(tài),它有下面幾種可能未修改,并且版本庫(kù)也未修改(Up-to-date狀態(tài))已修改,但是版本庫(kù)沒有修改(Modified狀態(tài))未修改,但是版本庫(kù)已經(jīng)修改已修改,并且版本庫(kù)也已修改(需要合并)可以用svn status命令查看文件狀態(tài),混合修訂版本的工作拷貝,很靈活,但是比較難理解的一個(gè)特性混合修訂版的工作拷貝:為了靈活,允許一個(gè)工作拷貝中存在多個(gè)修訂版本的文件SVN特性:修訂版本號(hào)的全局性。如果某文件的修訂號(hào)為N,并

14、不意味這這個(gè)文件被提交了N次(甚至有可能這個(gè)文件只修改過1次),而意味著整個(gè)版本庫(kù)被提交了N次當(dāng)一次Checkout或者(整個(gè)工作拷貝的)Update操作完成后,工作拷貝中所有文件都會(huì)被更新到同一個(gè)版本號(hào)兩個(gè)操作可能引起混合版本的情況:提交和部分更新,混合修訂版本的工作拷貝(續(xù)),提交會(huì)引起混合修訂版本的情況SVN的原則:一個(gè)PUSH的動(dòng)作不會(huì)導(dǎo)致被PUSH,或者反之。換句話說,提交某個(gè)修改的過程不會(huì)導(dǎo)致工作拷貝被修改。在SVN中

15、,更新和提交是分開的當(dāng)提交修改時(shí),被提交修改的文件版本號(hào)將遞增,但是工作拷貝中的其他文件仍然保持原有版本號(hào),于是就形成了混合修訂版本的格局,混合修訂版本的工作拷貝(續(xù)),很顯然,(部分)更新也可能會(huì)引起這種情況部分更新是指對(duì)工作拷貝中某個(gè)文件或者子目錄的更新操作(不限于更新到HEAD)很靈活的一個(gè)特性,混合修訂版本的工作拷貝(續(xù)),混合修訂版本是一種正常的情況同時(shí),混合修訂版本很有用例如,可以用來追溯Bug的源頭,或者確定某個(gè)

16、特性在某個(gè)歷史版本中是否具有會(huì)影響某些命令,如Log例如,當(dāng)前HEAD版本號(hào)為2007,而你由于做了很多提交操作,但一直沒有做更新操作,導(dǎo)致雖然最新的文件版本號(hào)已經(jīng)是2007,但是仍然有文件版本號(hào)只有1937,當(dāng)你對(duì)這個(gè)文件用log命令想查看歷史記錄,會(huì)發(fā)現(xiàn)這個(gè)文件的歷史到1937就為止了混合版本有限制:不是最新的不能提交(喜新厭舊?),4 Subversion基本工作流程和基本操作,Subversion的基本工作流程是:,(續(xù)

17、),基本命令CheckOutUpdateStatus/LogCommitSVN的幫助,用svn help 命令名稱可以得到命令的幫助,或者查看man手冊(cè)和info頁(yè)。Windows環(huán)境下可以查看Subversion帶的CHM格式參考資料,一般help命令就足夠了,CheckOut操作,從版本庫(kù)中取出某個(gè)目錄的拷貝到本機(jī)上某個(gè)目錄的操作叫做CheckOut,這個(gè)操作是工作的基礎(chǔ)語法:checkout(co) URL[@REV]

18、... [PATH]注:省略svn,即完整的命令應(yīng)該是svn checkout …例1:svn co svn://218.94.9.38/svnrepos/skizcorp/trunk在當(dāng)前目錄建立一個(gè)trunk目錄,里面是工作拷貝例2:svn co svn://localhost/torm I:\PROJECTS\torm會(huì)在I:\PROJECTS\目錄下創(chuàng)建torm目錄,里面存放工作拷貝例2的命令較為常用,因?yàn)榇蠖鄶?shù)情況

19、下,我們并不想把工作拷貝目錄命名為trunk,CheckOut操作(續(xù)),指明Checkout的版本號(hào)默認(rèn)CheckOut操作是針對(duì)HEAD版本進(jìn)行的,大多數(shù)情況下我們需要HEAD版本,但如果需要?dú)v史版本,可以用-r(--revision)參數(shù)或者是用“@版本號(hào)”的形式例:…-r 1452 會(huì)檢出1452版,如果存在的話 …-r {“2007-05-05”} 會(huì)檢出最接近這個(gè)日期的版本 …/

20、trunk@1452 效果同第1個(gè)例子遞歸與不遞歸-N:不遞歸(僅針對(duì)頂層目錄),否則目錄遞歸(默認(rèn),常用)注:上面兩個(gè)參數(shù)-r –N在很多命令里面都用到,Update操作,把版本庫(kù)的修改同步到本地的過程是Update語法: update(up) [PATH...]例1:up直接把工作拷貝更新到最新版(HEAD版)例2:up -r 2007更新到2007版例3:up doc/design只更新doc/design下的

21、文件-r和-N參數(shù)仍然有用Update會(huì)修改被更新目錄的BASE版本號(hào),文件狀態(tài),BASE版:某個(gè)文件的BASE版本是指存放在管理目錄.svn中的該文件拷貝的版本,Revert會(huì)使該文件回到BASE版本做Update操作時(shí),SVN會(huì)打印出受影響文件的狀態(tài),有以下幾種:A AddedD DeletedU UpdatedC ConflictG Merged若提示C,表示沖突,沖突可以用status命令加-u參數(shù)來

22、預(yù)測(cè),Revert操作——時(shí)光倒流,所謂Revert,是指放棄對(duì)某個(gè)文件的修改,把該文件的內(nèi)容回復(fù)和BASE版本相同,也就是,把該文件的狀態(tài)回復(fù)到未修改狀態(tài)語法:revert 文件/路徑例子例1 revert abc.c 丟棄對(duì)abc.c的所有修改例2 revert src/edu/nju/pojo 放棄對(duì)此目錄下所有文件的修改,沖突解決,當(dāng)文件發(fā)生沖突時(shí),SVN會(huì)額外創(chuàng)建3個(gè)不受版本控制的文件,同時(shí)被沖突文件如果能夠合并,會(huì)在

23、被沖突文件內(nèi)部留下沖突記錄。例如,沖突的文件為plugin.c,BASE版本是1458,HEAD為1459,會(huì)產(chǎn)生3個(gè)臨時(shí)文件plugin.c.mine,plugin.c.r1458,plugin.c.r1459,解決思路:A. 手動(dòng)修改被沖突文件 B. 放棄自己的更改實(shí)際中,解決辦法很靈活,一般需要與他人商量注意:由于這3個(gè)文件是在Update后才創(chuàng)建的,而Update之后,工作拷貝的BASE目錄已經(jīng)變成更新后的版本了,所以放棄

24、自己的更改會(huì)回到新版本如果不是用Revert的方法解決沖突的話,由于那3個(gè)臨時(shí)文件留在那里,會(huì)使Subversion認(rèn)為沖突沒有解決,所以要運(yùn)行resolved命令告訴SVN沖突解決或者刪除臨時(shí)文件,工作拷貝中對(duì)文件的操作,編輯文件,沒什么好說的把一個(gè)文件加入SVN版本控制,用add命令從版本控制中移除,用delete(rm, remove)命令移動(dòng)或者重命名,用move(rename)命令拷貝,用copy命令創(chuàng)建目錄,用m

25、kdir命令具體命令用法請(qǐng)參照文檔注意:盡量不要用操作系統(tǒng)提供的命令管理文件,這樣Subversion不知道更改,檢驗(yàn)修改,通過status命令可以檢查工作拷貝的狀態(tài)通過diff命令可以檢查更改的內(nèi)容參考SVN手冊(cè)注意:SVN對(duì)文件屬性的更改和文件內(nèi)容的更改是分開管理的,提交修改,一般在提交修改之前,必須運(yùn)行一下update操作來合并別人作出的新更改。提交用commit命令--message 參數(shù):說明本次提交的有關(guān)信息,

26、如為什么要作出這個(gè)修改等等。參考SVN book,5 Subversion高級(jí)操作,SVN的高級(jí)操作主要包括分支(Branch/Tag)以及合并(Merge)操作分支操作切換URL合并操作,為什么需要分支?,你在開發(fā)一個(gè)軟件,基于Windows平臺(tái)。有一天,老板找到你,希望你把這個(gè)軟件移植到Linux平臺(tái)下,同時(shí)又不放棄原有版本,怎么管理代碼?你的產(chǎn)品即將發(fā)布,需要進(jìn)行一段時(shí)間的Alpha,Beta測(cè)試直至正式版Releas

27、e。同時(shí),市場(chǎng)的競(jìng)爭(zhēng)迫使你必須馬不停蹄的開發(fā)下一個(gè)新版本,增加許多新的特性。兩個(gè)工作必須同時(shí)進(jìn)行,怎么管理代碼?,什么是分支?,,分支的概念,從圖中可以看到,分支是開發(fā)的一條“支線”。它獨(dú)立于其他開發(fā)的線路,并且和其他線路并行開發(fā)但是,所有的分支都有共同的歷史,有著原先共同的主線,創(chuàng)建分支,創(chuàng)建分支使用copy命令語法:copy 源目錄 目標(biāo)目錄方法方法1:先把目錄checkout到本地,在本地執(zhí)行copy命令后提交至版本庫(kù)

28、例:svn co svn://localhost/ svn copy trunk/ branches/mybranch svn commit –m “My branch created”方法2:直接用copy命令對(duì)版本庫(kù)中兩個(gè)URL進(jìn)行操作例:svn copy svn://localhost/trunk svn://localhost/branches/mybranch –m “My branch”,

29、創(chuàng)建分支前后版本庫(kù)的變化,之前 之后,,,在分支上工作,要想在分支上工作,需要一個(gè)對(duì)應(yīng)于分支的工作拷貝。有兩種方法可以獲得這種工作拷貝方法1:直接從分支的URL上Checkout出工作拷貝(適用于沒有工作拷貝的情況)方法2:使用switch命令切換工作拷貝對(duì)應(yīng)的URL(在有工作拷貝的基礎(chǔ)上),Switch操作,Switch操作可以使工作拷貝在不同的分支之間或者在 位于不同服

30、務(wù)器上 相同的 版本庫(kù) 的 分支間切換。它的作用是改變工作拷貝對(duì)應(yīng)的URLSwitch & Update:Update命令是Switch命令的一個(gè)子集語法:switch [--relocate] 目標(biāo)URL慎用-relocate選項(xiàng),分支的合并(1),分支的合并是指把修改從分支拷貝到主干或者把主干的修改拷貝到分支的過程。傳統(tǒng)方法:diff + patch例子:svn diff –r 2000:2007 svn://lo

31、calhost/trunk > patchfile patch –p0 < patchfile這個(gè)例子取出主干2000版到2007版的修改,然后把它應(yīng)用到工作拷貝(工作拷貝這個(gè)時(shí)候一般對(duì)應(yīng)于某個(gè)分支)只適用于文件內(nèi)容,對(duì)于目錄樹結(jié)構(gòu)無能為力,分支的合并(2)——Merge操作,Merge操作和傳統(tǒng)方法十分類似,但是它能夠處理目錄樹的修改,而不限于單個(gè)文件內(nèi)容語法:merge 初始版本樹 最終版本

32、樹 目標(biāo)常用語法:merge 初始版本:最終版本 版本庫(kù)URL 目標(biāo)作用:取出初始版本到最終版本的修改,然后把它應(yīng)用到當(dāng)前工作拷貝例子merge svn://localhost/trunk@2000 svn://localhost/trunk@2007 my_wcmerge –r 2000:2007 svn://localhost/trunk my_wc,SVN版本庫(kù)常用目錄組織結(jié)構(gòu),,6 Subversion其他操作及命令

溫馨提示

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

評(píng)論

0/150

提交評(píng)論