新聞中心
本節(jié)講解一下SVN簡(jiǎn)易使用手冊(cè)中使用svn獲取開(kāi)源項(xiàng)目源代碼的內(nèi)容,之前一節(jié)我們沒(méi)有講解完畢,在這里做一下補(bǔ)充,希望通過(guò)本節(jié)大家能夠?qū)W到更多知識(shí)。

修改你的工作拷貝
SVN簡(jiǎn)易使用手冊(cè)介紹修改你的工作拷貝?,F(xiàn)在你可以開(kāi)始工作并且修改你的工作拷貝了,你很容易決定作出一個(gè)修改(或者是一組),像寫(xiě)一個(gè)新的特性,修正一個(gè)錯(cuò)誤等等。這時(shí)可以使用的Subversion命令包括svnadd、svndelete、svncopy和svnmove。如果你只是修改版本庫(kù)中已經(jīng)存在的文件,在你提交之前,不必使用上面的任何一個(gè)命令。你可以對(duì)工作備份作的修改包括:
文件修改
這是最簡(jiǎn)單的一種修改,你不必告訴Subversion你想修改哪一個(gè)文件,只需要去修改,然后Subversion會(huì)自動(dòng)地探測(cè)到哪些文件已經(jīng)更改了。
目錄樹(shù)修改
你可以“標(biāo)記”目錄或者文件為預(yù)定要?jiǎng)h除、增加、復(fù)制或者移動(dòng),也許這些改動(dòng)在你的工作拷貝馬上發(fā)生,而版本庫(kù)只在你提交的時(shí)候才發(fā)生改變。
修改文件,可以使用文本編輯器、字處理軟件、圖形程序或任何你常用的工具,Subverion處理二進(jìn)制文件像同文本文件一樣—效率也一樣。
這些是常用的可以修改目錄樹(shù)結(jié)構(gòu)的子命令(我們會(huì)在后面包括svnimport和svnmkdir)。
警告
SVN簡(jiǎn)易使用手冊(cè)中遇到的問(wèn)題警告。你可以使用任何你喜歡的工具編輯文件,但你不可以在修改目錄結(jié)構(gòu)時(shí)不通知Subversion,需要使用svncopy、svndelete和svnmove命令修改工作拷貝的結(jié)構(gòu),使用svnadd增加版本控制的新文件或目錄。
svnaddfoo預(yù)定將文件、目錄或者符號(hào)鏈foo添加到版本庫(kù),當(dāng)你下次提交后,foo會(huì)成為其父目錄的一個(gè)子對(duì)象。注意,如果foo是目錄,所有foo中的內(nèi)容也會(huì)預(yù)定添加進(jìn)去,如果你只想添加foo本身,使用--non-recursive(-N)參數(shù)。
svndeletefoo預(yù)定將文件、目錄或者符號(hào)鏈foo從版本庫(kù)中刪除掉,如果foo是文件,它馬上從工作拷貝中刪除,如果是目錄,不會(huì)被刪除,但是Subversion準(zhǔn)備好刪除了,當(dāng)你提交你的修改,foo就會(huì)在你的工作拷貝和版本庫(kù)中被刪除。[2]
svncopyfoobar建立一個(gè)新的項(xiàng)目bar作為foo的復(fù)制品,當(dāng)在下次提交時(shí)會(huì)將bar添加到版本庫(kù),這種拷貝歷史會(huì)記錄下來(lái)(按照來(lái)自foo的方式記錄),svncopy并不建立中介目錄。
svnmovefoobar這個(gè)命令與與運(yùn)行svncopyfoobar;svndeletefoo完全相同,bar作為foo的拷貝準(zhǔn)備添加,foo已經(jīng)預(yù)定要被刪除,svnmove不建立中介的目錄。
不通過(guò)工作拷貝修改版本庫(kù)
SVN簡(jiǎn)易使用手冊(cè)介紹不通過(guò)工作拷貝修改版本庫(kù)。本章的前面曾經(jīng)說(shuō)過(guò),為了使版本庫(kù)反映你的改動(dòng),你應(yīng)該提交所有改動(dòng)。這并不完全正確—有一些方式是可以直接操作版本庫(kù)的,當(dāng)然只有子命令直接操作URL而不是本地拷貝路徑時(shí)才可以實(shí)現(xiàn),通常svnmkdir、svncopy、svnmove、和svndelete可以使用URL工作。
指定URL的操作方式有一些區(qū)別,因?yàn)樵谑褂霉ぷ骺截惖倪\(yùn)作方式時(shí),工作拷貝成為一個(gè)“集結(jié)地”,可以在提交之前整理組織所要做的修改,直接對(duì)URL操作就沒(méi)有這種奢侈,所以當(dāng)你直接操作URL的時(shí)候,所有以上的動(dòng)作代表一個(gè)立即的提交。
檢查你的修改
當(dāng)你完成修改,你需要提交他們到版本庫(kù),但是在此之前,檢查一下做過(guò)什么修改是個(gè)好主意,通過(guò)提交前的檢查,你可以整理一份精確的日志信息,你也可以發(fā)現(xiàn)你不小心修改的文件,給了你一次恢復(fù)修改的機(jī)會(huì)。此外,這是一個(gè)審查和仔細(xì)察看修改的好機(jī)會(huì),你可通過(guò)命令svnstatus、svndiff和svnrevert精確地察看所做的修改。你可以使用前兩個(gè)命令察看工作拷貝中的修改,使用第三個(gè)來(lái)撤銷(xiāo)部分(或全部)的修改。
Subversion已經(jīng)被優(yōu)化來(lái)幫助你完成這個(gè)任務(wù),可以在不與版本庫(kù)通訊的情況下做許多事情,詳細(xì)來(lái)說(shuō),對(duì)于每一個(gè)文件,你的的工作拷貝在.svn包含了一個(gè)“原始的”拷貝,所以Subversion可以快速的告訴你那些文件修改了,甚至允許你在不與版本庫(kù)通訊的情況下恢復(fù)修改。
svnstatus相對(duì)于其他命令,你會(huì)更多地使用這個(gè)svnstatus命令。
CVS用戶(hù):控制另類(lèi)的更新!你也許使用cvsupdate來(lái)看你做了哪些修改,svnstatus會(huì)給你所有你做的改變—而不需要訪(fǎng)問(wèn)版本庫(kù),并且不會(huì)在不知情的情況下與其他用戶(hù)作的更改比較。
在Subversion,update只是做這件事—將工作拷貝更新到版本庫(kù)的***版本,你可以消除使用update察看本地修改的習(xí)慣。
SVN簡(jiǎn)易使用手冊(cè)中如果你在工作拷貝的***目錄運(yùn)行不帶參數(shù)的svnstatus命令,它會(huì)檢測(cè)你做的所有的文件或目錄的修改,以下的例子是來(lái)展示svnstatus可能返回的狀態(tài)碼(注意,#之后的不是svnstatus打印的)。Labc.c#svn已經(jīng)在.svn目錄鎖定了abc.cMbar.c#bar.c的內(nèi)容已經(jīng)在本地修改過(guò)了Mbaz.c#baz.c屬性有修改,但沒(méi)有內(nèi)容修改X3rd_party#這個(gè)目錄是外部定義的一部分?foo.o#svn并沒(méi)有管理foo.o!some_dir#svn管理這個(gè),但它可能丟失或者不完整~qux#作為file/dir/link進(jìn)行了版本控制,但類(lèi)型已經(jīng)改變I.screenrc#svn不管理這個(gè),配置確定要忽略它A+moved_dir#包含歷史的添加,歷史記錄了它的來(lái)歷M+moved_dir/README#包含歷史的添加,并有了本地修改Dstuff/fish.c#這個(gè)文件預(yù)定要?jiǎng)h除Astuff/loot/bloo.h#這個(gè)文件預(yù)定要添加Cstuff/loot/lump.c#這個(gè)文件在更新時(shí)發(fā)生沖突Rxyz.c#這個(gè)文件預(yù)定要被替換Sstuff/squawk#這個(gè)文件已經(jīng)跳轉(zhuǎn)到了分支在這種格式下,svnstatus打印五列字符,緊跟一些空格,接著是文件或者目錄名。***列告訴一個(gè)文件的狀態(tài)或它的內(nèi)容,返回代碼解釋如下:
Aitem文件、目錄或是符號(hào)鏈item預(yù)定加入到版本庫(kù)。
Citem文件item發(fā)生沖突,在從服務(wù)器更新時(shí)與本地版本發(fā)生交迭,在你提交到版本庫(kù)前,必須手工的解決沖突。
Ditem文件、目錄或是符號(hào)鏈item預(yù)定從版本庫(kù)中刪除。
Mitem文件item的內(nèi)容被修改了。
Ritem文件、目錄或是符號(hào)鏈item預(yù)定將要替換版本庫(kù)中的item,這意味著這個(gè)對(duì)象首先要被刪除,另外一個(gè)同名的對(duì)象將要被添加,所有的操作發(fā)生在一個(gè)修訂版本。
Xitem目錄沒(méi)有版本化,但是與Subversion的外部定義關(guān)聯(lián),關(guān)于外部定義,可以看“外部定義”一節(jié)。
?item文件、目錄或是符號(hào)鏈item不在版本控制之下,你可以通過(guò)使用svnstatus的--quiet(-q)參數(shù)或父目錄的svn:ignore屬性忽略這個(gè)問(wèn)題,關(guān)于忽略文件的使用,見(jiàn)“svn:ignore”一節(jié)。!item文件、目錄或是符號(hào)鏈item在版本控制之下,但是已經(jīng)丟失或者不完整,這可能因?yàn)槭褂梅荢ubversion命令刪除造成的,如果是一個(gè)目錄,有可能是檢出或是更新時(shí)的中斷造成的,使用svnupdate可以重新從版本庫(kù)獲得文件或者目錄,也可以使用svnrevertfile恢復(fù)原來(lái)的文件。
~item文件、目錄或是符號(hào)鏈item在版本庫(kù)已經(jīng)存在,但你的工作拷貝中的是另一個(gè)。舉一個(gè)例子,你刪除了一個(gè)版本庫(kù)的文件,新建了一個(gè)在原來(lái)的位置,而且整個(gè)過(guò)程中沒(méi)有使用svndelete或是svnadd。
Iitem文件、目錄或是符號(hào)鏈item不在版本控制下,Subversion已經(jīng)配置好了會(huì)在svnadd、svnimport和svnstatus命令忽略這個(gè)文件,關(guān)于忽略文件,見(jiàn)“svn:ignore”一節(jié)。注意,這個(gè)符號(hào)只會(huì)在使用svnstatus的參數(shù)--no-ignore時(shí)才會(huì)出現(xiàn)—否則這個(gè)文件會(huì)被忽略且不會(huì)顯示!
第二列說(shuō)明文件或目錄的屬性的狀態(tài)(更多細(xì)節(jié)可以看“屬性”一節(jié)),如果一個(gè)M出現(xiàn)在第二列,說(shuō)明屬性被修改了,否則顯示空白。
第三列只顯示空白或者L,L表示Subversion已經(jīng)在.svn工作區(qū)域鎖定了這個(gè)項(xiàng)目,當(dāng)你的svncommit正在運(yùn)行的時(shí)候—也許正在輸入log信息,運(yùn)行svnstatus你可以看到L標(biāo)記,如果這時(shí)候Subversion并沒(méi)有運(yùn)行,可以推測(cè)Subversion發(fā)生中斷并且已經(jīng)鎖定,你必須運(yùn)行svncleanup來(lái)清除鎖定(本節(jié)后面將有更多論述)。
第四列只會(huì)顯示空白或+,+的意思是一個(gè)有附加歷史信息的文件或目錄預(yù)定添加或者修改到版本庫(kù),通常出現(xiàn)在svnmove或是svncopy時(shí),如果是看到A+就是說(shuō)要包含歷史的增加,它可以是一個(gè)文件或是拷貝的根目錄。+表示它是即將包含歷史增加到版本庫(kù)的目錄的一部分,也就是說(shuō)他的父目錄要拷貝,它只是跟著一起的。M+表示將要包含歷史的增加,并且已經(jīng)更改了。當(dāng)你提交時(shí),首先會(huì)隨父目錄進(jìn)行包含歷史的增加,然后本地的修改提交到更改后的版本。
第五列只顯示空白或是S,表示這個(gè)目錄或文件已經(jīng)轉(zhuǎn)到了一個(gè)分支下了(使用svnswitch)。如果你傳遞一個(gè)路徑給svnstatus,它只給你這個(gè)項(xiàng)目的信息:$svnstatusstuff/fish.cDstuff/fish.c
svnstatus也有一個(gè)--verbose(-v)選項(xiàng),它可以顯示工作拷貝中的所有項(xiàng)目,即使沒(méi)有改變過(guò):
- $svnstatus--verboseM4423sallyREADME4430
- sallyINSTALLM4420harrybar.c4418ira
- stuff4435harrystuff/trout.cD4419ira
- stuff/fish.c4421sallystuff/thingsA0??
- stuff/things/bloo.h4436harrystuff/things/gloo.c
這是svnstatus的“加長(zhǎng)形式”,***列保持相同,第二列顯示一個(gè)工作版本號(hào),第三和第四列顯示***一次修改的版本號(hào)和修改人。上面所有的svnstatus調(diào)用并沒(méi)有聯(lián)系版本庫(kù),只是與.svn中的元數(shù)據(jù)進(jìn)行比較的結(jié)果,***,是--show-updates(-u)參數(shù),它將會(huì)聯(lián)系版本庫(kù)為已經(jīng)過(guò)時(shí)的數(shù)據(jù)添加新信息:
- $svnstatus--show-updates--verboseM*4423sallyREADMEM44
- 20harrybar.c*4435harrystuff/trout.cD44
- 19irastuff/fish.cA0??stuff/things/bloo.hStatus
- againstrevision:46
注意這兩個(gè)星號(hào):如果你現(xiàn)在執(zhí)行svnupdate,你的README和trout.c會(huì)被更新,這告訴你許多有用的信息—你可以在提交之前,需要使用更新操作得到文件README的更新,或者說(shuō)文件已經(jīng)過(guò)時(shí),版本庫(kù)會(huì)拒絕了你的提交。(后面還有更多關(guān)于此主題)。本節(jié)講解SVN簡(jiǎn)易使用手冊(cè)完畢。
【編輯推薦】
- SVN使用手冊(cè)之入門(mén)篇
- SVN管理與應(yīng)用相關(guān)的資料參考手冊(cè)
- ApacheSVN服務(wù)器安裝指導(dǎo)手冊(cè)
- Centos下SVN的安裝配置實(shí)用手冊(cè)
- SVN服務(wù)器安裝指導(dǎo)手冊(cè)
分享標(biāo)題:SVN簡(jiǎn)易使用手冊(cè)新手上路
文章分享:http://m.5511xx.com/article/dpccpse.html


咨詢(xún)
建站咨詢(xún)
