事實(shí)上SVN的確是我用過(guò)的最好的源碼管理工具,雖然我用過(guò)的這類(lèi)工具并不多,只有VSS、CVS和SVN,其它像PVCS、 TeamSource、ClearCase之類(lèi)的只有耳聞,因?yàn)樗鼈兌际巧虡I(yè)產(chǎn)品,并且通常用于管理大型的項(xiàng)目,沒(méi)有機(jī)會(huì)試用,所以也不知道它們?nèi)绾巍?VSS是我四年前在公司里用過(guò)的最早的一款源碼管理工具,不過(guò)它實(shí)在是太一般了,而且也是商業(yè)產(chǎn)品。所以除了公司里工作需要,我自己是不用的。從那公司出來(lái)以后,我試用了CVS,這才開(kāi)始對(duì)自己的源碼進(jìn)行管理。作為OSS圈里元老級(jí)的源碼管理工具,CVS有多強(qiáng)我不用再多說(shuō)。但是現(xiàn)在SVN這顆新星已經(jīng)漸漸要蓋過(guò)CVS的光芒了,可見(jiàn)SVN是有自己殺手锏的。還有一點(diǎn)很重要的就是:它也是一個(gè)開(kāi)源免費(fèi)的軟件。
SVN全名Subversion。SVN與CVS一樣,是一個(gè)跨平臺(tái)的軟件,支持大多數(shù)常見(jiàn)的操作系統(tǒng)。本文只討論Windows的情況。其官方網(wǎng)站是:
http://subversion.tigris.org(tigris是一個(gè)和sourceforge類(lèi)似的開(kāi)源網(wǎng)站,與sf不同的是,sf提供的CVS服務(wù),而tigris提供的是SVN服務(wù))。
在介紹SVN的應(yīng)用前,先討論一下源碼管理的一個(gè)重要的基本概念:Repository。Repository 就是源碼的集中存放處,所有修改后提交的源碼就是保存在這里,并在其中記錄所有的修改版本,分支版本,版本合并,以及并發(fā)修改處理等。傳統(tǒng)的VSS或 CVS都是采用類(lèi)似C/S的應(yīng)用方式,有一個(gè)獨(dú)立的服務(wù)端來(lái)做這些工作。而SVN則要靈活得多,它支持三種方式:獨(dú)立服務(wù)器方式、Web服務(wù)器方式(這是CVS所沒(méi)有的)和本文將要著重討論的Local方式。
回到主題上。個(gè)人源碼管理是我自己提的一個(gè)概念,以區(qū)別于團(tuán)隊(duì)開(kāi)發(fā)的源碼管理。本來(lái)像VSS、CVS、SVN這樣的工具最主要的功能是用于團(tuán)隊(duì)開(kāi)發(fā)時(shí)用的,用于處理源碼修改的版本控制和并發(fā)修改沖突。但對(duì)于個(gè)人開(kāi)發(fā)來(lái)說(shuō),就不存在并發(fā)修改沖突的問(wèn)題了。但個(gè)人開(kāi)發(fā)又存在一些新的問(wèn)題:一般個(gè)人沒(méi)有條件搭一個(gè)獨(dú)立的服務(wù)器來(lái)做Repository,所以實(shí)際上即使是用了CVS一類(lèi),也是服務(wù)端客戶(hù)端在一臺(tái)機(jī)器上,而且也不需要用戶(hù)權(quán)限管理這樣的功能。但有時(shí)又需要在不同的機(jī)器間拷貝源碼作開(kāi)發(fā),這又帶來(lái)版本混亂的潛在風(fēng)險(xiǎn)。而SVN的Local方式可以說(shuō)是最好的解決方案。
我現(xiàn)在的用法就是:在U盤(pán)里建立Repository,然后在每臺(tái)機(jī)器上都裝了SVN,這樣我就不需要一臺(tái)單獨(dú)的Repository服務(wù)器,只要在任一臺(tái)機(jī)器上把U盤(pán)插上即具備了完整的版本控制功能。
SVN的安裝和使用。
因?yàn)楸疚闹挥懻揥indows下的Local方式,所以不需要獨(dú)立服務(wù)器或Web服務(wù)器。SVN的客戶(hù)端和CVS一樣,也是命令行方式工作。但在Windows平臺(tái)下,我們有還別的選擇,這就是易用性很好的一個(gè)實(shí)現(xiàn):TortoiseSVN(注意:這是一個(gè)獨(dú)立于SVN的項(xiàng)目,類(lèi)似于WinCVS與CVS的關(guān)系)。其官方網(wǎng)站是:
http://www.tortoisesvn.org,下載其安裝程序:TortoiseSVN-1.1.3-UNICODE_svn-1.1.3.msi(這個(gè)文件名是指NT/2k/XP版的)。這個(gè)集成發(fā)布包中包含了Local應(yīng)用所需要的全部?jī)?nèi)容。如果想要中文版,還可以下載這個(gè)中文語(yǔ)言包:LanguagePack_1.1.3_zh_CN.exe(這是簡(jiǎn)體中文包,BTW:從進(jìn)度上看,繁體中文的完成度還要高些:P)。至于其它的如獨(dú)立服務(wù)器方式,Web服務(wù)器方式,命令行方式,Python支持等,都要相應(yīng)的安裝包提供,可自行參考SVN網(wǎng)站說(shuō)明下載安裝。
安裝的過(guò)程非常簡(jiǎn)單,只是安裝完成后必須重啟一下,因?yàn)樗傻絎indows的資源管理器中。這也可以算是SVN的又一個(gè)大優(yōu)點(diǎn)(多謝mikeshi指出:CVS也有一個(gè)TortoiseCVS,這不算是SVN的優(yōu)點(diǎn)),雖然CVS也有一個(gè)WinCVS不錯(cuò),但是它畢竟是一個(gè)額外的客戶(hù)端,不如TortoiseSVN這么方便。TortoiseSVN裝好后,只要在資源管理器中任何一個(gè)文件夾中點(diǎn)右鍵,即可出現(xiàn)如下圖所示的菜單(我打了中文包,所以顯示是中文,可以在Settings中選擇任何一種已經(jīng)安裝的語(yǔ)言包):
第一步:建立Local Repository
假設(shè)現(xiàn)在要開(kāi)始一個(gè)項(xiàng)目,叫做Project1。先在U盤(pán)(假設(shè)為U:)建立一個(gè)文件夾:u:\svn\project1。(可以定義庫(kù)文件夾所在位置)然后在這個(gè)文件夾上點(diǎn)右鍵,選擇:TortoiseSVN|在此創(chuàng)建文件庫(kù)。有兩種方式供選擇,如下圖:
Berkeley數(shù)據(jù)庫(kù)和本地文件系統(tǒng)。本地文件系統(tǒng)方式有點(diǎn)類(lèi)似于CVS,但實(shí)現(xiàn)方式上有所不同。Berkeley數(shù)據(jù)庫(kù)據(jù)說(shuō)是目前最好的嵌入式數(shù)據(jù)庫(kù)解決方案,TortoiseSVN默認(rèn)選擇BDB方式,推薦。確定創(chuàng)建后稍等一會(huì)即會(huì)彈出一個(gè)提示窗,說(shuō)明文件庫(kù)創(chuàng)建成功。
第二步:創(chuàng)建工作文件夾
在本地硬盤(pán)(如D盤(pán))創(chuàng)建一個(gè)工作文件夾:d:\working\project1。然后在這個(gè)文件夾上點(diǎn)右鍵,選擇:SVN取出。顯示如下對(duì)話框:
其中唯一需要指定的就是文件庫(kù)URL,Local方式是使用file協(xié)議。確定后顯示如下對(duì)話框:
點(diǎn)確定后完成創(chuàng)建工作,在文件夾中看到一個(gè)隱藏的文件夾:.svn。其中記錄了工作文件夾的一些必要信息,功能與CVS的CVS文件夾一樣。一個(gè)SVN的工作文件夾的圖標(biāo)上將會(huì)多了一個(gè)綠色的勾,所有被加入Respository的內(nèi)容都會(huì)在圖標(biāo)上加上這樣的綠勾,如圖:
第三步:開(kāi)始寫(xiě)程序
現(xiàn)在可以在此工作目錄中創(chuàng)建源程序文件或文件夾。在工作文件夾中的任何文件或文件夾(除了.svn文件夾)的右鍵菜單上都會(huì)增加一些項(xiàng)目,下圖分別為工作文件夾、工作文件夾下的子文件夾、工作文件夾中的文件、已經(jīng)提交的文件的右鍵菜單內(nèi)容:
從最左邊的菜單和最右邊的菜單上可以看到,SVN/TortoiseSVN支持了CVS的幾乎所有功能,還增加了一些很實(shí)用的功能(比如文件/文件夾的重命名,在這CVS里是最讓人頭疼的問(wèn)題之一)。這又是SVN的大優(yōu)點(diǎn)。
如果你的源程序原來(lái)就存在,可以立即導(dǎo)入到Repository里:在你原來(lái)的源程序文件夾上點(diǎn)右鍵,選擇TortoiseSVN|導(dǎo)入。即可。不過(guò)要注意:最好先在TortoiseSVN|設(shè)置里設(shè)定排除/忽略樣式(可以設(shè)置文件夾或文件名,支持通配符,區(qū)分大小寫(xiě)?。。。蚴窍葎h除不必要導(dǎo)入的文件。然后再取出(Checkout)到工作目錄即可。
第四步:將寫(xiě)好的程序提交到Repository
選擇所有要加入的文件和文件夾,然后點(diǎn)TortoiseSVN|加入。將顯示如下對(duì)話框(以將本文提交為例):
把它們加入Repository,確定后它的圖標(biāo)上將顯示一個(gè)“+”號(hào),表示這個(gè)文件已經(jīng)加入,但還未提交。再在當(dāng)前文件夾上點(diǎn)右鍵,選擇SVN提交即可。將顯示如下對(duì)話框(提交本文,其中的Repository是我實(shí)際使用的)
成功提交后,它的圖標(biāo)上也將顯示一個(gè)前面所示的那樣的綠勾。
第五步:日常使用
無(wú)非是重復(fù)前面的加入/提交等操作。如果在其它機(jī)器上使用,則需要重新創(chuàng)建工作目錄,并取出(Checkout)Repository中的源碼。如果同時(shí)在多臺(tái)機(jī)器上使用,則需要使用SVN更新功能來(lái)將此工作文件夾中的內(nèi)容更新為Repository中的相應(yīng)版本。
備注:最新SVN版本為1.6.3,但嘗試了下似乎不支持LOCAL方式了,我用的1.4.0是支持的。
另比較工具推薦使用BeyondCompare,SVN設(shè)置可以修改使用外部比較工具。