新聞中心
本節(jié)和大家一起學(xué)習(xí)一下SVN使用方法,主要從三方面來(lái)介紹,在這里和大家分享一下,希望本節(jié)的介紹對(duì)你的學(xué)習(xí)有所幫助。

SVN使用:
1. 首先是安裝TortoiseSVN這個(gè)Win下的客戶端(當(dāng)然用subversion自己的svn這個(gè)客戶端也可以完成所有操作,理論上)。這個(gè)客戶端是集成到Explore里的,所以沒有什么獨(dú)立的窗體,所有操作右鍵菜單來(lái)完成。
2. SVN使用基本流程:
下面說(shuō)的命令都與TortoiseSVN菜單上的名稱一致。
a. 初次(initial)取出(checkout)repos,建立本地工作拷貝(WC WorkingCopy)。
b. 與repos同步(update),保證將要進(jìn)行的編輯是***版本。
c. 編輯源代碼(包括創(chuàng)建、修改、刪除)。
d. 與repos同步(update),提交之前先要同步到***的版本,保證所有在自己之前的有關(guān)提交已經(jīng)在本地有所知曉。
e. 解決沖突(resolve conflict)。
f. 提交(commit),一定要寫上這次提交的內(nèi)容的摘要,便于以后查閱。
g. 繼續(xù)b。
每次開始新的編輯前的同步repos很重要,另外經(jīng)常地update沒有壞處,特別是多人項(xiàng)目中。如果每次提交(commit)前不進(jìn)行更新(update)的到***的版本的話,svn會(huì)提示當(dāng)前的拷貝過(guò)期,需要更新。
在使用的過(guò)程中,時(shí)刻注意當(dāng)前的工作拷貝(WC WorkingCopy)所對(duì)應(yīng)的URL很重要,特別是當(dāng)有了branches和tag等時(shí)候。使用svn info可以查看到這些信息。使用TortoiseSVN時(shí),通過(guò)下面的操作查看這些信息:右鍵單擊工作拷貝的根文件夾(不是上級(jí)文件夾),菜單中選擇則屬性(不是TortoiseSVN那個(gè)菜單),然后在出現(xiàn)的對(duì)話框中選擇Subversion標(biāo)簽就可以看到了。
3. SVN使用branches
(關(guān)于branches的內(nèi)容可以在svn-book:Chapter4 Branching and Merging得到)
當(dāng)多個(gè)人合作(Sally和John)時(shí),可能有這樣的情況出現(xiàn):John突然有個(gè)想法,跟原先的設(shè)計(jì)不太一致,可能是功能的添加或者日志格式的改進(jìn)等等,總而言之,這個(gè)想法可能需要花一段時(shí)間來(lái)完成,而這個(gè)過(guò)程中,John的一些操作可能會(huì)影響Sally的工作,John從現(xiàn)有的狀態(tài)單獨(dú)出一個(gè)project的話,又不能及時(shí)得到Sally對(duì)已有代碼做的修正,而且獨(dú)立出來(lái)的話,John的嘗試成功時(shí),跟原來(lái)的合并也存在困難。這時(shí)***的實(shí)踐方法是使用branches。John建立一個(gè)自己的branch,然后在里面實(shí)驗(yàn),必要的時(shí)候從Sally的trunk里取得更新,或者將自己的階段成果匯集到trunk中。
附:TortoiseSVN幫助里的branch的說(shuō)明:
One of the features of version control systems is the ability to isolate changes onto a separate line of development. This line is known as a branch. Branches are often used to try out new features without disturbing the main line of development with compiler errors and bugs. As soon as the new feature is stable enough then the development branch is merged back into the main branch (trunk).
3.1 創(chuàng)建branch
(詳細(xì)的解釋參考svn-book:Chapter4 Branching and Merging:Using Branches:Creating a Branch)
實(shí)際是svn copy操作
$ svn copy SourceURL/trunk \
DestinationURL/branchName \
-m "Creating a private branch of xxxx/trunk."
TorToiseSVN操作更為簡(jiǎn)單,只要在working copy里右鍵空白,然后在TorToiseSVN菜單中選擇Branches/Tags,就可將整個(gè)目錄分支(branch)出去,或者點(diǎn)擊某個(gè)文件將文件單獨(dú)分支(branch),而且有多種選擇,指定是“直接在服務(wù)器端copy HEAD版本”、“直接在服務(wù)器端copy指定版本”(這兩種相當(dāng)于svn copy中源和目的都是URL)、“用當(dāng)前的工作拷貝(WC Working Copy)生成”。同時(shí)還有一個(gè)checkbox用于在完成了這次分支(branch)后直接切換(switch)當(dāng)前的工作拷貝(WC Working Copy)到分支。#p#
3.2SVN使用中 使用merge來(lái)應(yīng)用branch的修改
3.2.1 trunk的變化及時(shí)更新到branch
例子原型出自svn-book:Chapter 4:Branching and Merging:Copying Changes Between Branches:Copying Specific Changes
接著前面的例子,John在實(shí)驗(yàn)過(guò)程中,Sally對(duì)原有的某個(gè)文件做了一些改動(dòng),如拼寫檢查等,John知道了,希望將這些改動(dòng)也放到自己的當(dāng)前的工作拷貝(WC Working Copy)中。svn中使用merge指令來(lái)完成。假設(shè)Sally的修訂使repos從Rev345到了Rev346,所以John就是要將Rev345:Rev346(前:后)的變更應(yīng)用到當(dāng)前的WC。使用TortoiseSVN的操作就是在WC中右鍵空白處,然后在相關(guān)菜單中選擇“Merge...”,在彈出的對(duì)話框中,F(xiàn)rom指定比較前項(xiàng)的位置和版本(這里是trunk的Rev345),To指定后項(xiàng)的位置和版本(這里是trunk的Rev346,可以使用一個(gè)復(fù)選框使的To的位置與From相同)。
相應(yīng)的svn merge指令參考后面“merge操作實(shí)質(zhì)”可知。
3.2.2 branch最終合并回trunk
例子原型出自svn-book:Chapter 4:Branching and Merging:Common Use-Cases:Merging a Whole Branch to Another
John經(jīng)過(guò)嘗試,終于實(shí)現(xiàn)了想法,并通過(guò)測(cè)試,現(xiàn)在他決定將所有的工作合并到trunk去。
這里要注意的是,John打算合并的是自己的工作,假設(shè)John的branch(johnBranch)開始于Rev233,John的工作提交到repos是Rev289,那么John的工作是將johnBranch:Rev233到j(luò)ohnBranch:Rev289的內(nèi)容合并到trunk。而不是johnBranch:Rev233到trunk:HEAD,因?yàn)檫@個(gè)變化包含了對(duì)John工作的增加和對(duì)trunk中其他人的工作的撤銷(如果John沒有及時(shí)將他人在trunk的工作合并到自己的johnBranch的話)。
TortoiseSVN的操作是這樣的,先checkout出trunk(也可以switch到trunk),即保證當(dāng)前的工作拷貝(WC WorkingCopy)是trunk,然后使用菜單中的“Merge...”,選擇From為johnBranch:Rev233選擇To為johnBranch:Rev289。
相應(yīng)的svn merge指令參考后面“merge操作實(shí)質(zhì)”可知。 下面我們來(lái)看一下SVN使用中merge操作的實(shí)質(zhì)。
3.2.3 merge操作的實(shí)質(zhì)
svn merge命令的原型如下
svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH]
svn merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]
svn merge -r N:M SOURCE[@REV] [WCPATH]
In the first and second forms, the source paths (URLs in the first form, working copy paths in the second) are specified at revisions N and M. These are the two sources to be compared. The revisions default to HEAD if omitted.
In the third form, SOURCE can be a URL or working copy item, in which case the corresponding URL is used. This URL, at revisions N and M, defines the two sources to be compared.
WCPATH is the working copy path that will receive the changes. If WCPATH is omitted, a default value of “.” is assumed, unless the sources have identical basenames that match a file within “.”: in which case, the differences will be applied to that file.
可以看出merge實(shí)際是比較前后(源:目的)兩個(gè)版本(revision)之間的差別(用運(yùn)算符就是 目的 – 源),然后將這些差別應(yīng)用(施用)到工作拷貝(WC WorkingCopy)上的一個(gè)操作,根據(jù)源與目的版本號(hào)的先后,出現(xiàn)了“合并”、“撤銷”(源版本號(hào)大于目的版本號(hào))等不同效果,然后通過(guò)提交(commit)來(lái)將這些效果保存到服務(wù)器端的repos中。本節(jié)關(guān)于SVN使用方法介紹完畢。
當(dāng)前標(biāo)題:學(xué)習(xí)筆記:SVN使用方法詳解
當(dāng)前路徑:http://fisionsoft.com.cn/article/ccodcce.html


咨詢
建站咨詢
