SVN的Local方式 個人原始碼管理的好辦法

2022-04-07 07:24:17 字數 2951 閱讀 9296

svn的local方式:個人原始碼管理的好辦法

svn、local方式、個人原始碼管理

今天在qq群裡,有人在打聽delphi的vss外掛程式,於是被我b4了一番。正好我最近試用了svn,感覺很不錯,於是在群裡強力推薦,以致於幾乎被認為是svn的托兒。-_-|||

事實上svn的確是我用過的最好的原始碼管理工具,雖然我用過的這類工具並不多,只有vss、cvs和svn,其它像pvcs、 teamsource、clearcase之類的只有耳聞,因為它們都是商業產品,並且通常用於管理大型的專案,沒有機會試用,所以也不知道它們如何。 vss是我四年前在公司裡用過的最早的一款原始碼管理工具,不過它實在是太一般了,而且也是商業產品。所以除了公司裡工作需要,我自己是不用的。從那公司出來以後,我試用了cvs,這才開始對自己的原始碼進行管理。作為oss圈裡元老級的原始碼管理工具,cvs有多強我不用再多說。但是現在svn這顆新星已經漸漸要蓋過cvs的光芒了,可見svn是有自己殺手鐗的。還有一點很重要的就是:它也是乙個開源免費的軟體。

svn全名subversion。svn與cvs一樣,是乙個跨平台的軟體,支援大多數常見的作業系統。本文只討論windows的情況。其官方**是:

(tigris是乙個和sourceforge類似的開源**,與sf不同的是,sf提供的cvs服務,而tigris提供的是svn服務)。

在介紹svn的應用前,先討論一下原始碼管理的乙個重要的基本概念:repository。repository 就是原始碼的集中存放處,所有修改後提交的原始碼就是儲存在這裡,並在其中記錄所有的修改版本,分支版本,版本合併,以及併發修改處理等。傳統的vss或 cvs都是採用類似c/s的應用方式,有乙個獨立的服務端來做這些工作。而svn則要靈活得多,它支援三種方式:獨立伺服器方式、web伺服器方式(這是cvs所沒有的)和本文將要著重討論的local方式。

回到主題上。個人原始碼管理是我自己提的乙個概念,以區別於團隊開發的原始碼管理。本來像vss、cvs、svn這樣的工具最主要的功能是用於團隊開發時用的,用於處理原始碼修改的版本控制和併發修改衝突。但對於個人開發來說,就不存在併發修改衝突的問題了。但個人開發又存在一些新的問題:一般個人沒有條件搭乙個獨立的伺服器來做repository,所以實際上即使是用了cvs一類,也是服務端客戶端在一台機器上,而且也不需要使用者許可權管理這樣的功能。但有時又需要在不同的機器間拷貝原始碼作開發,這又帶來版本混亂的潛在風險。而svn的local方式可以說是最好的解決方案。

我現在的用法就是:在u盤裡建立repository,然後在每台機器上都裝了svn,這樣我就不需要一台單獨的repository伺服器,只要在任一台機器上把u盤插上即具備了完整的版本控制功能。

svn的安裝和使用。

因為本文只討論windows下的local方式,所以不需要獨立伺服器或web伺服器。svn的客戶端和cvs一樣,也是命令列方式工作。但在windows平台下,我們有還別的選擇,這就是易用性很好的乙個實現:tortoisesvn(注意:這是乙個獨立於svn的專案,類似於wincvs與cvs的關係)。其官方**是:

安裝的過程非常簡單,只是安裝完成後必須重啟一下,因為它要整合到windows的資源管理器中。這也可以算是svn的又乙個大優點(多謝mikeshi指出:cvs也有乙個tortoisecvs,這不算是svn的優點),雖然cvs也有乙個wincvs不錯,但是它畢竟是乙個額外的客戶端,不如tortoisesvn這麼方便。tortoisesvn裝好後,只要在資源管理器中任何乙個資料夾中點右鍵,即可出現如下圖所示的選單(我打了中文包,所以顯示是中文,可以在settings中選擇任何一種已經安裝的語言包):

第一步:建立local repository

假設現在要開始乙個專案,叫做project1。先在u盤(假設為u:)建立乙個資料夾:u:/svn/project1。然後在這個資料夾上點右鍵,選擇:tortoisesvn|在此建立檔案庫。有兩種方式供選擇,如下圖:

berkeley資料庫和本地檔案系統。本地檔案系統方式有點類似於cvs,但實現方式上有所不同。berkeley資料庫據說是目前最好的嵌入式資料庫解決方案,tortoisesvn預設選擇bdb方式,推薦。確定建立後稍等一會即會彈出乙個提示窗,說明檔案庫建立成功。

第二步:建立工作資料夾

在本地硬碟(如d盤)建立乙個工作資料夾:d:/working/project1。然後在這個資料夾上點右鍵,選擇:svn取出。顯示如下對話方塊:

其中唯一需要指定的就是檔案庫url,local方式是使用file協議。確定後顯示如下對話方塊:

點確定後完成建立工作,在資料夾中看到乙個隱藏的資料夾:.svn。其中記錄了工作資料夾的一些必要資訊,功能與cvs的cvs資料夾一樣。乙個svn的工作資料夾的圖示上將會多了乙個綠色的勾,所有被加入respository的內容都會在圖示上加上這樣的綠勾,如圖:

第三步:開始寫程式

現在可以在此工作目錄中建立源程式檔案或資料夾。在工作資料夾中的任何檔案或資料夾(除了.svn資料夾)的右鍵選單上都會增加一些專案,下圖分別為工作資料夾、工作資料夾下的子資料夾、工作資料夾中的檔案、已經提交的檔案的右鍵選單內容:

從最左邊的選單和最右邊的選單上可以看到,svn/tortoisesvn支援了cvs的幾乎所有功能,還增加了一些很實用的功能(比如檔案/資料夾的重新命名,在這cvs裡是最讓人頭疼的問題之一)。這又是svn的大優點。

第四步:將寫好的程式提交到repository

選擇所有要加入的檔案和資料夾,然後點tortoisesvn|加入。將顯示如下對話方塊(以將本文提交為例):

把它們加入repository,確定後它的圖示上將顯示乙個「+」號,表示這個檔案已經加入,但還未提交。再在當前資料夾上點右鍵,選擇svn提交即可。將顯示如下對話方塊(提交本文,其中的repository是我實際使用的)

成功提交後,它的圖示上也將顯示乙個前面所示的那樣的綠勾。

第五步:日常使用

無非是重複前面的加入/提交等操作。如果在其它機器上使用,則需要重新建立工作目錄,並取出(checkout)repository中的原始碼。如果同時在多台機器上使用,則需要使用svn更新功能來將此工作資料夾中的內容更新為repository中的相應版本。

最後祝大家都能體會到svn所帶來的方便和愉快。

ConcurrentHashMap的原始碼分析

put final v putval k key,v value,boolean onlyifabsent 在上一步的else if中 f 不為null時,則判斷f的hash值是否為moved,即 1,如果為 1,表示正在擴容 else if fh f.hash moved 協助資料遷移 tab h...

DispatcherServlet的原始碼和流程分析

1 自動配置dispatcherservlet和dispatcherservletregistry 2 註冊dispatcherservlet到servletcontext 3 初始化mvc的元件 handler執行完成後,向dispatcherservlet 返回乙個modelandview物件 ...

ArrayList的remove 方法原始碼解讀

remove index public boolean remove object obj else return false arraylist的remove object obj 方法判斷是否為同乙個物件的時候用的是equals方法,如果我們要移除list中的自定義類的時候需要重寫equals方...