版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、自由、開源的版本管理系統(tǒng),南京大學軟件學院2009,1,1 Subversion簡介2 版本控制的基本原理3 Subversion基礎(chǔ)4 Subversion基本工作流程及基本操作CheckOut,Commit,Update,Status5 Subversion高級操作Branch/Tag,Merge6 Subversion其他操作(演示)7 常見Subversion的GUI客戶端使用(演示),內(nèi)容簡介
2、,1 Subversion簡介,Subversion的作用Subversion的歷史Subversion的特性Subversion的架構(gòu),Subversion的作用,一個自由,開源的版本控制系統(tǒng)一個通用系統(tǒng),不是簡單的一個SCM系統(tǒng)以替代CVS為目標可以管理任何類型文件,并且追蹤變更不具有某些和開發(fā)緊密結(jié)合的特性,如支持某種特定的編程語言,集成構(gòu)建工具等應(yīng)用:版本管理,網(wǎng)絡(luò)硬盤??網(wǎng)址:http://subversi
3、on.tigris.org,Subversion的歷史,2000年,CollabNet公司開始尋找CVS的替代產(chǎn)品2月,這個公司聯(lián)系了Open Source Development with CVS的作者Karl Fogel,他同意為這個項目工作。同時,他還聯(lián)系了其他幾個人一起開發(fā)這個新系統(tǒng)3月,Subversion開始詳細設(shè)計和編碼2001年8月31日,Subversion第一個完整版本問世經(jīng)過1.0,1.1,1.2直到現(xiàn)在的
4、1.4.3版,Subversion的特性(和CVS比較),和CVS的相似性目錄的版本化更加好的文件版本管理(例如對文件拷貝,重命名的處理)提交的原子性元數(shù)據(jù)的版本化可選的網(wǎng)絡(luò)層對文本文件和二進制文件一致的差異比較算法高效的分支(branch)和標簽(tag)操作良好的可維護性,Subversion的架構(gòu),,2 版本控制的基本原理,客戶/服務(wù)器架構(gòu)的版本控制簡述版本控制的數(shù)據(jù)共享模型數(shù)據(jù)共享的問題鎖定-修改-解鎖方
5、案拷貝-修改-合并方案沖突及解決兩種方案的對比及選擇Subversion的實現(xiàn),客戶/服務(wù)器架構(gòu)的版本控制,,版本庫(Repository):按照一定格式存儲了所有數(shù)據(jù),包括文件和目錄經(jīng)過授權(quán)的客戶端可以連接到版本庫,讀寫庫中的文件版本庫和普通文件服務(wù)器的不同:版本庫會記錄每一次的更改,所以,客戶端可以任意查詢更改的歷史。例如:ApplicationContext.java的1451版和1450版相比修改了什么?誰作的修改?
6、什么時候作的修改?等等,版本控制數(shù)據(jù)共享模型,版本控制系統(tǒng)的核心任務(wù):協(xié)作編輯和數(shù)據(jù)共享基礎(chǔ)問題:怎樣允許用戶共享信息,并且不會因意外而互相干擾?數(shù)據(jù)共享問題的產(chǎn)生解決辦法,數(shù)據(jù)共享問題,,解決方案1——鎖定-解鎖方案,,鎖定-解鎖方案的問題,可能導致管理問題,如長期鎖定文件不放會導致不必要的順序開發(fā)可能導致死鎖例如Sally和Harry都需要修改plugin_mgr.c和plugin_mgr.h,兩者互相關(guān)聯(lián),Sally鎖
7、定了.c文件而Harry鎖定了頭文件,就會進入死鎖狀態(tài),解決方案2——拷貝-修改-合并方案,,(續(xù)圖……),,沖突(Conflict)及解決(Resolve),沖突的產(chǎn)生:沖突是隨著拷貝-修改-合并方案的產(chǎn)生而帶來的問題。兩個開發(fā)者使用拷貝-修改-合并方案編輯同一個文件,并且兩人的修改發(fā)生了交疊時就發(fā)生了沖突沖突的解決:當沖突發(fā)生時,開發(fā)者會看到一對沖突的修改結(jié)果,通常情況下,必須讓引起沖突的兩個人商議之后,手動選擇保留一組更改。在這
8、里,版本控制系統(tǒng)只能提示沖突的發(fā)生而無法給出解決建議沖突的預(yù)防:增加開發(fā)者的交流可以最大限度減少沖突的發(fā)生,但是不可能杜絕沖突后面可以看到?jīng)_突的具體例子以及解決辦法,兩種方案的對比及選擇,雖然鎖定-解鎖方案有很多的弊端,但在一些情況下仍然是必須的;雖然拷貝-修改-合并模型能解決大多數(shù)問題,但它也不是萬能的比較:文本文件和二進制文件的特點選擇:拷貝-合并模型假定文件是可以通過上下文合并的。通常情況下,文本文件(例如源代碼以及用純文
9、本,HTML,TeX等格式保存的文檔)因為其內(nèi)部結(jié)構(gòu)直觀可知,容易理解上下文,所以用拷貝—合并方案較好。而二進制文件(例如用Microsoft Word格式,PDF等格式保存的文檔及圖片,聲音,可執(zhí)行文件,庫等)內(nèi)部結(jié)構(gòu)復(fù)雜,且不容易理解更改處的上下文,采用鎖定-解鎖方案較好,Subversion的實現(xiàn),Subversion主要采用拷貝-修改-合并模型,配合鎖定-解鎖模型管理數(shù)據(jù)的共享,3 Subversion基礎(chǔ),基本概念工作拷貝
10、(Working Copy)修訂版本(Revision)文件狀態(tài)混合修訂版本的工作拷貝,工作拷貝(Working Copy),工作拷貝是本地機器的一個普通的目錄。這個目錄的內(nèi)容是版本庫中某個目錄的拷貝。工作拷貝是私有工作區(qū),可以任意編輯里面的文件并且發(fā)布更改通常,一個工作拷貝對應(yīng)于版本庫的一個子目錄,日常的開發(fā)是針對工作拷貝進行的工作拷貝里面還有一些由Subversion創(chuàng)建和維護的額外文件,用于命令的協(xié)助執(zhí)行,所以它們又叫工
11、作拷貝管理目錄。通常,它們都保存在工作拷貝目錄及子目錄下的.svn目錄(隱藏)中,憑借這個目錄中保存的信息,Subversion可以識別哪一個文件被修改了,哪一個文件已經(jīng)過時了,等等,修訂版本(Revision),SVN的提交(Commit)操作是把工作拷貝的更改發(fā)布到版本庫的一個原子操作。每當一次提交完成后,版本庫的文件系統(tǒng)就進入了一個新的狀態(tài),叫做一次修訂(Revision),每一次修訂都會賦予一個獨一無二的版本號,一般是從0開始的
12、遞增自然數(shù),一個比一個大初始修訂版本是0,這只是一個空目錄,沒有任何內(nèi)容。隨著每次的提交,版本庫里仿佛就多了一個當前內(nèi)容的“快照”。在版本庫中,最新的一個修訂版本稱為HEAD,修訂版本(圖示),,(HEAD),文件狀態(tài),對于工作拷貝的每一個文件,SVN在管理目錄(.svn)記錄兩項關(guān)鍵的信息該文件作為基準的修訂版本(叫做文件的工作修訂版本)該文件最后更新的時間戳根據(jù)以上兩項關(guān)鍵信息,通過和版本庫通訊,SVN可以得到工作拷貝中一個
13、文件的狀態(tài),它有下面幾種可能未修改,并且版本庫也未修改(Up-to-date狀態(tài))已修改,但是版本庫沒有修改(Modified狀態(tài))未修改,但是版本庫已經(jīng)修改已修改,并且版本庫也已修改(需要合并)可以用svn status命令查看文件狀態(tài),混合修訂版本的工作拷貝,很靈活,但是比較難理解的一個特性混合修訂版的工作拷貝:為了靈活,允許一個工作拷貝中存在多個修訂版本的文件SVN特性:修訂版本號的全局性。如果某文件的修訂號為N,并
14、不意味這這個文件被提交了N次(甚至有可能這個文件只修改過1次),而意味著整個版本庫被提交了N次當一次Checkout或者(整個工作拷貝的)Update操作完成后,工作拷貝中所有文件都會被更新到同一個版本號兩個操作可能引起混合版本的情況:提交和部分更新,混合修訂版本的工作拷貝(續(xù)),提交會引起混合修訂版本的情況SVN的原則:一個PUSH的動作不會導致被PUSH,或者反之。換句話說,提交某個修改的過程不會導致工作拷貝被修改。在SVN中
15、,更新和提交是分開的當提交修改時,被提交修改的文件版本號將遞增,但是工作拷貝中的其他文件仍然保持原有版本號,于是就形成了混合修訂版本的格局,混合修訂版本的工作拷貝(續(xù)),很顯然,(部分)更新也可能會引起這種情況部分更新是指對工作拷貝中某個文件或者子目錄的更新操作(不限于更新到HEAD)很靈活的一個特性,混合修訂版本的工作拷貝(續(xù)),混合修訂版本是一種正常的情況同時,混合修訂版本很有用例如,可以用來追溯Bug的源頭,或者確定某個
16、特性在某個歷史版本中是否具有會影響某些命令,如Log例如,當前HEAD版本號為2007,而你由于做了很多提交操作,但一直沒有做更新操作,導致雖然最新的文件版本號已經(jīng)是2007,但是仍然有文件版本號只有1937,當你對這個文件用log命令想查看歷史記錄,會發(fā)現(xiàn)這個文件的歷史到1937就為止了混合版本有限制:不是最新的不能提交(喜新厭舊?),4 Subversion基本工作流程和基本操作,Subversion的基本工作流程是:,(續(xù)
17、),基本命令CheckOutUpdateStatus/LogCommitSVN的幫助,用svn help 命令名稱可以得到命令的幫助,或者查看man手冊和info頁。Windows環(huán)境下可以查看Subversion帶的CHM格式參考資料,一般help命令就足夠了,CheckOut操作,從版本庫中取出某個目錄的拷貝到本機上某個目錄的操作叫做CheckOut,這個操作是工作的基礎(chǔ)語法:checkout(co) URL[@REV]
18、... [PATH]注:省略svn,即完整的命令應(yīng)該是svn checkout …例1:svn co svn://218.94.9.38/svnrepos/skizcorp/trunk在當前目錄建立一個trunk目錄,里面是工作拷貝例2:svn co svn://localhost/torm I:\PROJECTS\torm會在I:\PROJECTS\目錄下創(chuàng)建torm目錄,里面存放工作拷貝例2的命令較為常用,因為大多數(shù)情況
19、下,我們并不想把工作拷貝目錄命名為trunk,CheckOut操作(續(xù)),指明Checkout的版本號默認CheckOut操作是針對HEAD版本進行的,大多數(shù)情況下我們需要HEAD版本,但如果需要歷史版本,可以用-r(--revision)參數(shù)或者是用“@版本號”的形式例:…-r 1452 會檢出1452版,如果存在的話 …-r {“2007-05-05”} 會檢出最接近這個日期的版本 …/
20、trunk@1452 效果同第1個例子遞歸與不遞歸-N:不遞歸(僅針對頂層目錄),否則目錄遞歸(默認,常用)注:上面兩個參數(shù)-r –N在很多命令里面都用到,Update操作,把版本庫的修改同步到本地的過程是Update語法: update(up) [PATH...]例1:up直接把工作拷貝更新到最新版(HEAD版)例2:up -r 2007更新到2007版例3:up doc/design只更新doc/design下的
21、文件-r和-N參數(shù)仍然有用Update會修改被更新目錄的BASE版本號,文件狀態(tài),BASE版:某個文件的BASE版本是指存放在管理目錄.svn中的該文件拷貝的版本,Revert會使該文件回到BASE版本做Update操作時,SVN會打印出受影響文件的狀態(tài),有以下幾種:A AddedD DeletedU UpdatedC ConflictG Merged若提示C,表示沖突,沖突可以用status命令加-u參數(shù)來
22、預(yù)測,Revert操作——時光倒流,所謂Revert,是指放棄對某個文件的修改,把該文件的內(nèi)容回復(fù)和BASE版本相同,也就是,把該文件的狀態(tài)回復(fù)到未修改狀態(tài)語法:revert 文件/路徑例子例1 revert abc.c 丟棄對abc.c的所有修改例2 revert src/edu/nju/pojo 放棄對此目錄下所有文件的修改,沖突解決,當文件發(fā)生沖突時,SVN會額外創(chuàng)建3個不受版本控制的文件,同時被沖突文件如果能夠合并,會在
23、被沖突文件內(nèi)部留下沖突記錄。例如,沖突的文件為plugin.c,BASE版本是1458,HEAD為1459,會產(chǎn)生3個臨時文件plugin.c.mine,plugin.c.r1458,plugin.c.r1459,解決思路:A. 手動修改被沖突文件 B. 放棄自己的更改實際中,解決辦法很靈活,一般需要與他人商量注意:由于這3個文件是在Update后才創(chuàng)建的,而Update之后,工作拷貝的BASE目錄已經(jīng)變成更新后的版本了,所以放棄
24、自己的更改會回到新版本如果不是用Revert的方法解決沖突的話,由于那3個臨時文件留在那里,會使Subversion認為沖突沒有解決,所以要運行resolved命令告訴SVN沖突解決或者刪除臨時文件,工作拷貝中對文件的操作,編輯文件,沒什么好說的把一個文件加入SVN版本控制,用add命令從版本控制中移除,用delete(rm, remove)命令移動或者重命名,用move(rename)命令拷貝,用copy命令創(chuàng)建目錄,用m
25、kdir命令具體命令用法請參照文檔注意:盡量不要用操作系統(tǒng)提供的命令管理文件,這樣Subversion不知道更改,檢驗修改,通過status命令可以檢查工作拷貝的狀態(tài)通過diff命令可以檢查更改的內(nèi)容參考SVN手冊注意:SVN對文件屬性的更改和文件內(nèi)容的更改是分開管理的,提交修改,一般在提交修改之前,必須運行一下update操作來合并別人作出的新更改。提交用commit命令--message 參數(shù):說明本次提交的有關(guān)信息,
26、如為什么要作出這個修改等等。參考SVN book,5 Subversion高級操作,SVN的高級操作主要包括分支(Branch/Tag)以及合并(Merge)操作分支操作切換URL合并操作,為什么需要分支?,你在開發(fā)一個軟件,基于Windows平臺。有一天,老板找到你,希望你把這個軟件移植到Linux平臺下,同時又不放棄原有版本,怎么管理代碼?你的產(chǎn)品即將發(fā)布,需要進行一段時間的Alpha,Beta測試直至正式版Releas
27、e。同時,市場的競爭迫使你必須馬不停蹄的開發(fā)下一個新版本,增加許多新的特性。兩個工作必須同時進行,怎么管理代碼?,什么是分支?,,分支的概念,從圖中可以看到,分支是開發(fā)的一條“支線”。它獨立于其他開發(fā)的線路,并且和其他線路并行開發(fā)但是,所有的分支都有共同的歷史,有著原先共同的主線,創(chuàng)建分支,創(chuàng)建分支使用copy命令語法:copy 源目錄 目標目錄方法方法1:先把目錄checkout到本地,在本地執(zhí)行copy命令后提交至版本庫
28、例:svn co svn://localhost/ svn copy trunk/ branches/mybranch svn commit –m “My branch created”方法2:直接用copy命令對版本庫中兩個URL進行操作例:svn copy svn://localhost/trunk svn://localhost/branches/mybranch –m “My branch”,
29、創(chuàng)建分支前后版本庫的變化,之前 之后,,,在分支上工作,要想在分支上工作,需要一個對應(yīng)于分支的工作拷貝。有兩種方法可以獲得這種工作拷貝方法1:直接從分支的URL上Checkout出工作拷貝(適用于沒有工作拷貝的情況)方法2:使用switch命令切換工作拷貝對應(yīng)的URL(在有工作拷貝的基礎(chǔ)上),Switch操作,Switch操作可以使工作拷貝在不同的分支之間或者在 位于不同服
30、務(wù)器上 相同的 版本庫 的 分支間切換。它的作用是改變工作拷貝對應(yīng)的URLSwitch & Update:Update命令是Switch命令的一個子集語法:switch [--relocate] 目標URL慎用-relocate選項,分支的合并(1),分支的合并是指把修改從分支拷貝到主干或者把主干的修改拷貝到分支的過程。傳統(tǒng)方法:diff + patch例子:svn diff –r 2000:2007 svn://lo
31、calhost/trunk > patchfile patch –p0 < patchfile這個例子取出主干2000版到2007版的修改,然后把它應(yīng)用到工作拷貝(工作拷貝這個時候一般對應(yīng)于某個分支)只適用于文件內(nèi)容,對于目錄樹結(jié)構(gòu)無能為力,分支的合并(2)——Merge操作,Merge操作和傳統(tǒng)方法十分類似,但是它能夠處理目錄樹的修改,而不限于單個文件內(nèi)容語法:merge 初始版本樹 最終版本
32、樹 目標常用語法:merge 初始版本:最終版本 版本庫URL 目標作用:取出初始版本到最終版本的修改,然后把它應(yīng)用到當前工作拷貝例子merge svn://localhost/trunk@2000 svn://localhost/trunk@2007 my_wcmerge –r 2000:2007 svn://localhost/trunk my_wc,SVN版本庫常用目錄組織結(jié)構(gòu),,6 Subversion其他操作及命令
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- groove簡易教程
- 流行和聲簡易教程
- 簡易攝影操作教程
- led導光板簡易教程
- eac制作ape簡易教程
- 網(wǎng)上年檢簡易教程
- 簡易ai基礎(chǔ)教程
- 3done簡易操作教程
- 3done簡易操作教程
- 電子琴簡譜簡易教程
- 3dmax 花紋制作簡易教程
- 皮影制作簡易教程(張治文)
- 《約翰.湯普森》簡易鋼琴教程第1冊教學計劃
- 《約翰湯普森》簡易鋼琴教程第1冊教學計劃
- 10小時快速做外貿(mào)簡易教程
- 約翰湯普森簡易鋼琴教程2(2)
- 約翰湯普森簡易鋼琴教程研究_11655
- ps教程photoshop制作簡易炫彩背景圖
- catia_v5線束設(shè)計入門簡易教程
- 一師一優(yōu)課活動視頻編輯簡易教程
評論
0/150
提交評論