SVN簡(jiǎn)易使用手冊(cè)實(shí)例詳解
本節(jié)接著上節(jié)介紹SVN簡(jiǎn)易使用手冊(cè),上節(jié)我們講到了使用Subversion管理本地project中如何將本地工程hello導(dǎo)入本地的Subversion的工程倉(cāng)庫(kù)問(wèn)題,本節(jié)繼續(xù)介紹,另外介紹一下使用svn獲取開(kāi)源項(xiàng)目源代碼問(wèn)題,希望你能感興趣,讓我們一起來(lái)學(xué)習(xí)SVN簡(jiǎn)易使用手冊(cè)。
(4)工程開(kāi)發(fā)過(guò)程中的版本管理與控制
SVN簡(jiǎn)易使用手冊(cè)介紹使用subversion對(duì)工程進(jìn)行版本管理的一般流程如下:
a)建立工程的數(shù)據(jù)倉(cāng)庫(kù),并導(dǎo)入工程的最初版本(前面已經(jīng)完成);
b)從倉(cāng)庫(kù)獲取一個(gè)“工作副本”(svncheckout,可以獲取***版本也可以獲取以前的某個(gè)版本),在這個(gè)“工作副本”中進(jìn)行工程開(kāi)發(fā),修改完畢將變動(dòng)提交到倉(cāng)庫(kù)。下面簡(jiǎn)單介紹b)步驟。
由于工程hello已經(jīng)導(dǎo)入到倉(cāng)庫(kù),因此原目錄可以刪除。我們刪除原目錄,并從倉(cāng)庫(kù)獲取工程hello的一個(gè)“工作副本”(workingcopy);當(dāng)然,如果你當(dāng)心這樣做會(huì)造成數(shù)據(jù)丟失,完全可以重新建立一個(gè)目錄,將“工作副本”保存到那里。
[aaronwong@localhostprojects]$rm-rfhello/
[aaronwong@localhostprojects]$svncheckoutfile:///home/aaronwong/.subversion/repos/hello/trunkhello
Ahello/hello.c取出版本1。//注意,我們用紅色標(biāo)出了"trunk",如果不指定這一目錄,則會(huì)取出除工程源文件外的其他不必要的目錄如branches和tags。
[aaronwong@localhostprojects]$ls-ahello/...hello.c.svn
//可以看到“工作副本”下有一個(gè).svn隱藏目錄,其中就包含了subversion用用來(lái)進(jìn)行版本管理的信息。下面可以對(duì)工程hello的內(nèi)容進(jìn)行編輯和修改。注意,如果要在工程中增加或刪除某一文件或目錄(包括復(fù)制和移動(dòng)),必須使用svnadd/delete/mkdir/copy/move等相關(guān)命令進(jìn)行標(biāo)記。
- [aaronwong@localhosthello]$pwd
- /home/aaronwong/projects/hello
- [aaronwong@localhosthello]$vimhello.c
- [aaronwong@localhosthello]$cathello.c
- //Thisisthesecondversion.
- #include<stdio.h>
- intmain()
- {printf("Helloworld!\n");
- return;}
- [aaronwong@localhosthello]$mkdirdoc
- [aaronwong@localhosthello]$vimdoc/readme.txt
- [aaronwong@localhosthello]$svnadddoc
- Adoc
- Adoc/readme.txt//說(shuō)明:如果svnadd的對(duì)象是一個(gè)目錄,則該目錄及其子目錄和其下的文件都會(huì)被添加到工程。對(duì)工程編輯完畢,你可以檢查一下該次編輯對(duì)工程(實(shí)際上是對(duì)你的"工作副本")做了哪些改動(dòng)。
- [aaronwong@localhosthello]$svnstatus
- Mhello.c
- Adoc
- Adoc/readme.txt
- [aaronwong@localhosthello]$svndiff
- Index:hello.c
- ===================================================================
- ---hello.c(版本1)
- +++hello.c(工作副本)
- @@-1,10+1,10@@
- -//Thisisaoriginalversion.
- +//Thisisthesecondversion.
- #include<stdio.h>
- intmain()
- {printf("Helloworld!\n");-
- +return;}
- Index:doc/readme.txt
- ===================================================================
- ---doc/readme.txt(版本0)
- +++doc/readme.txt(版本0)
- @@-0,0+1,2@@
- +Thisisanexampleforsubversiontutorial.
//可以看到,svndiff提供了更詳細(xì)的改動(dòng)信息,并且很容易的將該命令的輸出重定向?yàn)橐粋€(gè)patch補(bǔ)丁。檢查確認(rèn)無(wú)誤后,便可提交此次更改,同時(shí)要附加此次更改的說(shuō)明注釋信息。
[aaronwong@localhosthello]$svncommit-m"documentsadded."
新增doc
新增doc/readme.txt
正在發(fā)送hello.c
傳輸文件數(shù)據(jù)..
提交后的版本為2。
現(xiàn)在工程倉(cāng)庫(kù)中已經(jīng)保存了上面所提交的版本2的工程的所有信息,因此,上面的“工作副本”也可以被刪除:當(dāng)然,如果下次你還要繼續(xù)使用這個(gè)“工作副本”進(jìn)行工作,則可以保留這個(gè)副本,不過(guò)需要注意的是,如果你是在一個(gè)開(kāi)發(fā)團(tuán)隊(duì)中,開(kāi)發(fā)團(tuán)隊(duì)的任一成員都可能在你不知情的情況下更新了工程版本,因此,在團(tuán)隊(duì)開(kāi)發(fā)中,進(jìn)入已有的“工作副本”進(jìn)行編輯前,應(yīng)該先使用"svnupdate"命令將當(dāng)前“工作副本”更新到倉(cāng)庫(kù)中的***版本。
3.使用svn獲取開(kāi)源項(xiàng)目源代碼
SVN簡(jiǎn)易使用手冊(cè)介紹一下使用svn獲取開(kāi)源項(xiàng)目源代碼。這實(shí)際上是獲取一個(gè)“工作副本”的過(guò)程。例如我需要下載ffmpeg的***源代碼,就可以使用svncheckout命令來(lái)完成:
[aaronwong@localhost~]$svncheckoutsvn://svn.mplayerhq.hu/ffmpeg/trunkffmpeg
Affmpeg/configure
Affmpeg/Doxyfile
Affmpeg/ffmpeg.c
Affmpeg/vhook
Affmpeg/vhook/imlib2.c
Affmpeg/vhook/drawtext.c
Affmpeg/vhook/fish.c
Affmpeg/vhook/null.c......
Subversion有許多特性、選項(xiàng)和華而不實(shí)的高級(jí)功能,但日常的工作中你只使用其中的一小部分,有一些只在特殊情況才會(huì)使用,在這一節(jié)里,我們會(huì)介紹許多你在日常工作中常見(jiàn)的命令。
典型的工作周期是這樣的:
更新你的工作拷貝
svnupdate
做出修改
svnadd
svndelete
svncopy
svnmove
檢驗(yàn)修改
svnstatus
svndiff
svnrevert
合并別人的修改到工作拷貝
svnupdate
svnresolved
提交你的修改
svncommit
更新你的工作拷貝
SVN簡(jiǎn)易使用手冊(cè)介紹如何更新你的工作拷貝。當(dāng)你在一個(gè)團(tuán)隊(duì)的項(xiàng)目里工作時(shí),你希望更新你的工作拷貝得到所有其他人這段時(shí)間作出的修改,使用svnupdate讓你的工作拷貝與***的版本同步。
$svnupdateUfoo.cUbar.cUpdatedtorevision2.
這種情況下,其他人在你上次更新之后提交了對(duì)foo.c和bar.c的修改,因此Subversion更新你的工作拷貝來(lái)引入這些更改。
讓我們認(rèn)真檢查svnupdate的輸出,當(dāng)服務(wù)器發(fā)送修改到你的工作拷貝,一個(gè)字母顯示在每一個(gè)項(xiàng)目之前,來(lái)讓你知道Subversion對(duì)你的工作拷貝做了什么操作:
Ufoo文件foo更新了(從服務(wù)器收到修改)。
Afoo文件或目錄foo被添加到工作拷貝。
Dfoo文件或目錄foo在工作拷貝被刪除了。
Rfoo文件或目錄foo在工作拷貝已經(jīng)被替換了,這是說(shuō),foo被刪除,而一個(gè)新的同樣名字的項(xiàng)目添加進(jìn)來(lái),它們具有同樣的名字,但是版本庫(kù)會(huì)把它們看作具備不同歷史的不同對(duì)象。
Gfoo文件foo接收到版本庫(kù)的更改,你的本地版本也已經(jīng)修改,但改變沒(méi)有互相影響,Subversion成功的將版本庫(kù)和本地文件合并,沒(méi)有發(fā)生任何問(wèn)題。
Cfoo文件foo的修改與服務(wù)器沖突,服務(wù)器的修改與你的修改交迭在一起,不要恐慌,這種沖突需要人(你)來(lái)解決,我們?cè)诤竺娴恼鹿?jié)討論這種情況。請(qǐng)期待下節(jié)SVN簡(jiǎn)易使用手冊(cè)介紹。
【編輯推薦】