本文目的
來源:http://www.cnblogs.com/chencidi/archive/2010/12/13/1904781.html
讓未使用過版本控制器軟件或者未使用過subversion軟件的人員盡快上手。
subversion的使用技巧很多,這里只總結了最小使用集,即主要的基本功能,能夠用來應付日常工作。
因此不涉及subversion服務器端的搭建和配置。
為什么要使用版本控制
當多人共同開發同一個軟件時,會涉及源代碼的共享以及帶來的相關問題,比如追究某個代碼是由誰在什么時間修改的。
下面列出版本控制帶來的好處:
- 為團隊提供了所有項目文檔的回退按鈕,個人IDE工具只能提供某個文件的回退按鈕,而不能做到,比如回退到2008年6月12日下午3點10分時的所有項目文件;
- 支持多個開發人員在可控的方式下為相同的代碼工作;
- 版本控制系統保存了文檔在過去的各個改動,便于查找是誰,在何時,因為什么修改了文檔;
- 支持在文檔的主線上同時有多個版本(版本的分支和合并是版本控制的主要手段,一些開發團隊僅僅是簡單的共享代碼主干);
- 支持查詢在某個時點上項目各個文檔的狀態,可用于研究生產效率等(比如,統計項目哪個時期代碼提交最活躍,以及每個人的代碼提交頻次等等),也可用于對以前的軟件發行版的再發行(比如,以前構建的2.0版本的安裝包丟失了,那么可以通過版本控制器記錄的歷史重新回溯到那個版本,然后重新構建出安裝包)。
為什么使用subversion
首先,考慮的是使用免費開源和輕量級的版本控制器。
第二,要求使用比較廣泛,可選的有cvs和svn。
這里選擇svn,主要考慮是比較好集成apache使用,提交代碼支持原子級操作(即,比如提交3個文件,如果因為網絡或者其他原因,上傳2個文件后中斷,svn能做到服務器端回滾到提交前的狀態,而cvs做不到這點,需要手工檢查和恢復)。
subversion的程序構成
subversion程序,和mysql很類似,是c/s結構的,有客戶端和服務器端。服務器端和客戶端都是通過命令行方式啟動和執行的。本文只會使用到客戶端的命令。
第三方提供了各種圖形界面的客戶端工具,比如eclipse插件subclipse,windows圖形界面工具tortoiseSVN。這些后面會提到它們的基本使用。
subversion資源
- subversion官方網站: http://subversion.tigris.org/
- subclipse官方網站: http://subclipse.tigris.org/
- tortoiseSVN官方網站: http://tortoisesvn.tigris.org/
- 使用subversion進行版本控制中文版在線版本: http://www.subversion.org.cn/svnbook/
安裝subversion
有關subversion和subclise的安裝暫略,因為目前提供的虛擬機開發環境已經安裝和配置。
tortoiseSVN,可到官方網站上下載最新版本的windows安裝包,默認安裝,不需要做其他設置,安裝后需要重啟計算機。能在資源管理器中鼠標右鍵菜單看到如下圖所示條目,就說明安裝成功。
使用subversion
日常工作中使用subversion僅僅是幾個命令或者操作,并不復雜。但是它內部的一些機制需要逐漸去理解。
檢出代碼
在剛開始進入一個開發隊伍的時候,已經有版本控制和軟件項目,使用的第一個命令往往是檢出(checkout)代碼?;蛘弋斒褂煤脱芯块_源軟件的時候,也是第一個要用到這個命令。這個命令的作用是把項目的源代碼下載到用戶本地,并且帶有版本控制信息。
比如,執行以下命令獲取一個項目的源代碼:
這個命令將在本地當前目錄建vfs.demo目錄并將該服務器目錄下的所有文件下載到本地,并且,會生成隱藏文件.SVN目錄,用于記錄版本控制信息。
tortoiseSVN有圖形界面的檢出操作,但是命令行方便快捷,建議使用命令行。
如果使用eclipse并安裝了subclipse插件,可以通過插件導入項目。
然后,
選擇或者新建資源庫位置,
選擇資源庫中的項目目錄。
然后,就可以完成(finish)了。
初始導入
何時使用初始導入,比如,對于java開發人員來說,在eclipse中編寫了一個項目,并決定把項目共享到版本控制器上,這時就需要初始導入操作了。
以下以subclipse為例說明初始導入的步驟。
第一步,選擇share project,共享你的項目:
選擇通過svn共享項目:
填寫svn提交的url:
這個url,需要subversion的管理員告知你,還有用戶名和密碼。如果想練習一下,google提供了免費的svn,你可以通過: http://code.google.com 申請項目,這樣就會有類似我上面的url和權限。
然后可以直接點擊finish,完成初始提交。選擇next,可以做定制模塊名和初始提交的信息,一般不需要。
如果你的svn服務器使用了https協議,需要接受一個數字證書,一般選擇永久接受。
之后,會要求輸入用戶名和密碼。建議勾選保存密碼,否則會很麻煩。
這樣,再看項目,會發現條目上多了問號,這時需要選擇哪些目錄和文件需要提交,哪些需要忽略,比如生成的class文件等。
選擇需要忽略的文件或者目錄,這時需要切換到導航視圖下才能看到所有文件和目錄:
從導航視圖看到的情況:
選中需要忽略的目錄和文件,操作svn:
然后提交整個項目即可。有關提交的操作見下文。
更新項目
項目在提交前,應該先做更新項目操作。比如有一個文件a.txt,已經提交到svn中,這樣,可能有其他用戶提交了新的改動到a.txt,你現在又修改了a.txt,準備提交你的改動。先操作更新a.txt,這樣如果該文件在svn服務器已經改動,會將改動加入到當前本地的a.txt中。
在subclipse中的操作:
提交代碼
提交代碼,一般會級聯當前目錄下所有改動的內容。
刪除代碼
對于不再使用的代碼,可以直接刪除掉,比如通過windows刪除文件,通過ubuntu的rm命令或者通過eclipse的delete功能,然后提交項目,subclipse會知道哪個文件被刪除了,并將這個變化通知給svn服務器。
還原代碼
如果代碼做了改動,可以是多個文件,也可以刪除了文件或者新增了文件,但是沒有提交到svn服務器,可以通過還原功能恢復到改動前的樣子。
版本的分支與合并
版本的分支和合并,是版本控制的核心功能。
比如,軟件通過版本的分支,將項目分配給多人做分工開發,通過版本合并,將這些分工實現的代碼合并到新的版本中;或者,修改代碼bug的時候,可以先打出一個版本分支,保留出現bug的版本,比如分支版本名稱為pre_fix_bug_2201,這里2201表示bug的代號,然后針對這個分支做修改fix這個bug,再將修改后的內容提交到一個新的分支版本,比如post_fix_bug_2201,再到適當時候將這個分支合并到代碼主干中去。
以上說了一下版本分支與合并的用途,這里簡單說一下svn版本分支合并的基本原理。
首先是版本分支,實際上是將當前版本“copy”到分支上,非常類似windows下,將某個目錄的快捷方式復制到其他路徑。這種copy,可以說是輕量級copy或者叫廉價copy,不是復制版本內容,而是做一個內部的引用。這樣的copy很快,對服務器也沒有空間上的開銷。
版本的合并,是svn開發中的難點,當做版本合并的時候,服務器會試圖智能的合并同一個文件的不同版本,可能會帶來版本沖突,這需要操作者做手工的處理,消除版本沖突。合理分工的項目應該可以通過管理手段盡量避免這種情況。
以下是通過subclipse演示版本分支的操作。首先,項目文檔應該已經全部提交,然后,選擇
然后,填寫url,一般是在tags/目錄下:
然后默認選項,next即可,然后選擇finish按鈕。在svn的相應路徑下就會有一個同名的項目。
打分支,實際上就是建立了一個項目的輕量級copy。
如何從版本的一個分支切換到另外一個分支,這也是很重要的,它能幫助你輕松在不同的項目版本中自動切換,而不必在eclipse里維持多個項目。
選擇要切換的項目版本路徑,或者直接輸入亦可。
然后點擊ok后,項目即可切換到該版本下。
在分支上做了改動,并且已經提交(一般tags目錄下的項目約定是只讀的,不建議改動,這里是為了舉例方便),那么,可以將這個版本合并到trunk(主干)代碼中,讓主干也擁有最新的代碼。
選擇需要合并的源,比如從tags上面一個版本,合并到主干(trunk)代碼中。
之后,需要設置一些合并的特性,這里默認配置即可。
執行完畢后,會有一個合并報告,可見沒有出現沖突情況。
這時候看源代碼,可以發現有改動,這些改動就是合并過來的代碼。
改動如果沒有問題,就可以提交,這樣就完成了一次版本的合并工作。
?
?
“還原”已經提交的改動
如果文檔沒有提交,還原是很容易的,只需執行還原(revert)就可以了。有時候,已經提交了代碼,結果發現了問題,需要回退到之前提交的版本,就不是很容易了。
這時候的還原,其實是將以前的某個修訂本(revision)覆蓋當前的本地工作拷貝。然后再提交這些改動,成為新的修訂本。
下面演示一下。
首先提交了一個版本的改動,這是以后需要還原回來,這里,為了以后還原方便,要在提交的消息中說明改動了什么。(這一步在開發中是必須的,是紀律)
下面,再修改一下項目,然后提交一次,這里故意增加一個文件。
提交以后,后悔了,想恢復到前一個修訂版。雖然可以通過版本號進行覆蓋還原,但是一般人是無法記憶這個版本號的,另外就是實際情況往往更復雜,不會像示例中那樣是相鄰的兩個修訂版。
所以提交修訂版時的注解消息就顯得特別重要。
這時可以通過svn的日志功能查看到這些版本和它們的注釋消息。
看到歷次版本的消息內容。
這樣,根據注釋,我們很容易找到需要還原到以前的那個修訂版。如果不放心,我們還可以根據上下文菜單,對比兩個修訂版的區別。
看比較結果??梢钥闯觯黾恿艘粋€文件,另外一個文件中有一處差異。
那么,可以確定是從125修訂版恢復(還原)。
更改后的項目,相當于用125修訂版還原了126修訂版。
可以看到126版本添加的文件不見了,另外VfsDemo.java文件也還原到125版本的內容。這時提交將成為127版本,這個版本其實就是125版本。算是還原了主干(trunk)上的代碼。
刷新歷史,可以看到修訂版已經生效。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
