學習筆記 :SVN使用方法詳解
本節(jié)和大家一起學習一下SVN使用方法,主要從三方面來介紹,在這里和大家分享一下,希望本節(jié)的介紹對你的學習有所幫助。
SVN使用:
1. 首先是安裝TortoiseSVN這個Win下的客戶端(當然用subversion自己的svn這個客戶端也可以完成所有操作,理論上)。這個客戶端是集成到Explore里的,所以沒有什么獨立的窗體,所有操作右鍵菜單來完成。
2. SVN使用基本流程:
下面說的命令都與TortoiseSVN菜單上的名稱一致。
a. 初次(initial)取出(checkout)repos,建立本地工作拷貝(WC WorkingCopy)。
b. 與repos同步(update),保證將要進行的編輯是***版本。
c. 編輯源代碼(包括創(chuàng)建、修改、刪除)。
d. 與repos同步(update),提交之前先要同步到***的版本,保證所有在自己之前的有關(guān)提交已經(jīng)在本地有所知曉。
e. 解決沖突(resolve conflict)。
f. 提交(commit),一定要寫上這次提交的內(nèi)容的摘要,便于以后查閱。
g. 繼續(xù)b。
每次開始新的編輯前的同步repos很重要,另外經(jīng)常地update沒有壞處,特別是多人項目中。如果每次提交(commit)前不進行更新(update)的到***的版本的話,svn會提示當前的拷貝過期,需要更新。
在使用的過程中,時刻注意當前的工作拷貝(WC WorkingCopy)所對應(yīng)的URL很重要,特別是當有了branches和tag等時候。使用svn info可以查看到這些信息。使用TortoiseSVN時,通過下面的操作查看這些信息:右鍵單擊工作拷貝的根文件夾(不是上級文件夾),菜單中選擇則屬性(不是TortoiseSVN那個菜單),然后在出現(xiàn)的對話框中選擇Subversion標簽就可以看到了。
3. SVN使用branches
(關(guān)于branches的內(nèi)容可以在svn-book:Chapter4 Branching and Merging得到)
當多個人合作(Sally和John)時,可能有這樣的情況出現(xiàn):John突然有個想法,跟原先的設(shè)計不太一致,可能是功能的添加或者日志格式的改進等等,總而言之,這個想法可能需要花一段時間來完成,而這個過程中,John的一些操作可能會影響Sally的工作,John從現(xiàn)有的狀態(tài)單獨出一個project的話,又不能及時得到Sally對已有代碼做的修正,而且獨立出來的話,John的嘗試成功時,跟原來的合并也存在困難。這時***的實踐方法是使用branches。John建立一個自己的branch,然后在里面實驗,必要的時候從Sally的trunk里取得更新,或者將自己的階段成果匯集到trunk中。
附:TortoiseSVN幫助里的branch的說明:
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
(詳細的解釋參考svn-book:Chapter4 Branching and Merging:Using Branches:Creating a Branch)
實際是svn copy操作
$ svn copy SourceURL/trunk \
DestinationURL/branchName \
-m "Creating a private branch of xxxx/trunk."
TorToiseSVN操作更為簡單,只要在working copy里右鍵空白,然后在TorToiseSVN菜單中選擇Branches/Tags,就可將整個目錄分支(branch)出去,或者點擊某個文件將文件單獨分支(branch),而且有多種選擇,指定是“直接在服務(wù)器端copy HEAD版本”、“直接在服務(wù)器端copy指定版本”(這兩種相當于svn copy中源和目的都是URL)、“用當前的工作拷貝(WC Working Copy)生成”。同時還有一個checkbox用于在完成了這次分支(branch)后直接切換(switch)當前的工作拷貝(WC Working Copy)到分支。#p#
3.2SVN使用中 使用merge來應(yīng)用branch的修改
3.2.1 trunk的變化及時更新到branch
例子原型出自svn-book:Chapter 4:Branching and Merging:Copying Changes Between Branches:Copying Specific Changes
接著前面的例子,John在實驗過程中,Sally對原有的某個文件做了一些改動,如拼寫檢查等,John知道了,希望將這些改動也放到自己的當前的工作拷貝(WC Working Copy)中。svn中使用merge指令來完成。假設(shè)Sally的修訂使repos從Rev345到了Rev346,所以John就是要將Rev345:Rev346(前:后)的變更應(yīng)用到當前的WC。使用TortoiseSVN的操作就是在WC中右鍵空白處,然后在相關(guān)菜單中選擇“Merge...”,在彈出的對話框中,F(xiàn)rom指定比較前項的位置和版本(這里是trunk的Rev345),To指定后項的位置和版本(這里是trunk的Rev346,可以使用一個復選框使的To的位置與From相同)。
相應(yīng)的svn merge指令參考后面“merge操作實質(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)過嘗試,終于實現(xiàn)了想法,并通過測試,現(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,因為這個變化包含了對John工作的增加和對trunk中其他人的工作的撤銷(如果John沒有及時將他人在trunk的工作合并到自己的johnBranch的話)。
TortoiseSVN的操作是這樣的,先checkout出trunk(也可以switch到trunk),即保證當前的工作拷貝(WC WorkingCopy)是trunk,然后使用菜單中的“Merge...”,選擇From為johnBranch:Rev233選擇To為johnBranch:Rev289。
相應(yīng)的svn merge指令參考后面“merge操作實質(zhì)”可知。 下面我們來看一下SVN使用中merge操作的實質(zhì)。
3.2.3 merge操作的實質(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實際是比較前后(源:目的)兩個版本(revision)之間的差別(用運算符就是 目的 – 源),然后將這些差別應(yīng)用(施用)到工作拷貝(WC WorkingCopy)上的一個操作,根據(jù)源與目的版本號的先后,出現(xiàn)了“合并”、“撤銷”(源版本號大于目的版本號)等不同效果,然后通過提交(commit)來將這些效果保存到服務(wù)器端的repos中。本節(jié)關(guān)于SVN使用方法介紹完畢。
【編輯推薦】