posts - 262,  comments - 221,  trackbacks - 0

          【1】創建一個版本庫


          為了使用SVN,除了必須安裝SVN軟件和客戶端(可選)外,我們還必須創建一個版本庫(Repository)。

          在創建版本庫之前我想說的是:不管如何請確保你有對版本庫進行直接訪問的權限。因為某些SVN操作的命令不能在客戶端進行,必須在擁有版本庫的機器上進行。所以我建議在本系列中把版本庫安裝在本地。

          按照約定,我們的版本庫要安裝在C:\Develop\MyRepository\Workspace下。那么創建它的命令是什么呢?

           Step 1: 在DOS命令行環境下轉到C:\Develop\MyRepository\目錄下

           Step 2: 在命令下執行如下命令:C:\Develop\MyRepository\Workspace>svnadmin create .

          這個命令執行后不會在控制臺輸出任何結果,但是你會發現現在在Workspace目錄下多出了若干目錄和文件,它們包括:目錄conf、db、hooks、locks和若干文件。這就是它的作用了。SVN通過這個命令為我們立即創建了一個版本庫,以后我們要做的所有操作,每次操作的歷史記錄都會存儲到這里。

          注意:
          svnadmin 命令是SVN管理員使用命令,必須在擁有SVN軟件的機器上進行。假如你是通過客戶端連接的,那你將沒有權限執行這個命令。其次 create 是子命令,指出本次的管理操作是一個創建動作。最后實心句點代表了當前目錄。整個命令就是告訴SVN:我希望在當前目錄位置創建一個版本庫。你可以指定任意位置來創建一個版本庫

          【2】訪問版本庫


          當版本庫創建完畢后,我們想到的第一件事就是如何訪問它。這里訪問版本庫包含三個方面的問題:

           A.以什么協議訪問?
           B.從什么地方訪問?
           C.用什么命令訪問?


          SVN提供了幾種訪問方式來讓我們看到它的版本庫內容。這些方式包括:
           
           A.使用傳統的file協議訪問方式
           B.使用傳統的http協議訪問方式
           C.使用獨有的svn協議訪問方式

          實際上我們最常使用的是第2和第3種方式。第2種方式適用于本地訪問,即不需要跨網絡的方式。第3種適用的范圍更廣,可以配置從外網訪問SVN,甚至可以使用SSL進行加密。這里因為我使用的Apache+SVN的組合,所以我的訪問方式是使用http協議。我的Apache的http.conf文件配置如下:

          <Location /svn>
             DAV svn
             SVNParentPath C:\Develop\MyRepository
             AuthType Basic
             AuthName "Subversion repositories"
             AuthUserFile C:\Develop\CollabNet\httpd\conf\passwd 
             AuthzSVNAccessFile C:\Develop\CollabNet\httpd\conf\authz
             Require valid-user 
          </Location>

          這意味著只要我訪問的URL路徑為:http://localhost:8000/svn/Workspace,Apache會知道我實際上訪問的是路徑:C:\Develop\MyRepository\Workspace。并且它知道如何去哪里找用戶驗證文件和權限文件。

          好了我們的第一個問題:使用什么方式訪問?已經解決了。答案就是使用http協議。

          關于第二個問題的答案已經變得很清晰了,既然http協議是基于web的協議,那么我們可以使用任何可以識別HTTP協議的工具去訪問。從瀏覽器,甚至從DOS命令端都可以。

          現在是最后一個問題了,SVN分別為服務端和客戶端提供了不同的命令來訪問版本庫。請看下面的表格:
           

          列出目錄結構

          顯示項目信息

          顯示項目內容

          顯示工作拷貝信息

          客戶端:svn

          svn list

          svn info

          svn cat

          svn status

          服務端:svnlook

          svnlook tree

          svnlook info

          svnlook cat


          我們可以看到對于svn和svnlook,它們都有一些相同的子命令:info,cat。那么在使用的時候有什么不同嗎?下面是兩個基本原則:

           A.svn命令是在客戶端使用的,而svnlook命令只能在擁有版本庫的機器上使用(即版本庫服務器)
           B.svn命令的路徑參數可以是本地路徑形式(PATH),也可以是遠程路徑形式(URL);svnlook只能使用PATH形式

          關于這些命令的不同用法,我會在后續的文章中一一講解。下面我們先來關注svn list和svnlook tree命令

          【3】svn list和svnlook tree命令
          假設目前在我們的版本庫下存在兩個目錄:Ericsson和Learning。那么我們現在分別使用svn list和svnlook tree命令來查看這個目錄結構:

          C:\>svn list http://localhost:8000/svn/Workspace
          Ericsson/
          Learning/

          C:\>svnlook tree C:\Develop\MyRepository\Workspace
          /
           Learning/
           Ericsson/

          C:\>svnlook tree http://localhost:8000/svn/Workspace
          'http://localhost:8000/svn/Workspace' is a URL when it should be a path

          我們說過svnlook tree命令只能使用本地路徑方式,不能使用遠程路徑,所以第三個命令執行時會報錯。

          可能你會說:我并沒有發現有諸如“C:\Develop\MyRepository\Workspace\Ericsson”或者“C:\Develop\MyRepository\Workspace\Learning”之類的路徑存在啊?注意這里不是以磁盤文件的路徑來表示的,如果我們把C:\Develop\MyRepository\Workspace視為版本庫的根目錄/,其它下級子目錄或文件就是相對于該根目錄/的。

          也許你又會說,那么我們能不能使用諸如svn list C:\Develop\MyRepository\Workspace的方式呢?試一試:

          C:\>svn list C:\Develop\MyRepository\Workspace
          svn: 'C:\Develop\MyRepository\Workspace' is not a working copy

          很遺憾,當svn list 命令使用本地路徑的時候,本地路徑必須是一個Working copy下的路徑,也就是說這個PATH必須是一個從版本庫check out出來的項目的根路徑或下級路徑。因為SVN最終會把該本地路徑轉換成對應的版本庫路徑(也即是遠程路徑形式,所以如果本地路徑不是一個Working copy那么轉換工作將會失敗)。

          下面我們把svn list和svnlook tree命令的用法總結一下:

            A.svn list PATH:列出PATH對應的版本庫路徑下的目錄內容
            B.svn list URL:  列出URL對應的路徑下的目錄內容
            C.svnlook tree REPOS_PATH:遞歸地列出REPOS_PATH對應的版本庫路徑下的目錄樹內容
            D.svnlook tree REPOS_PATH PATH_IN_REPOS: 遞歸地列出REPOS_PATH下子目錄PATH_IN_REPOS路徑下的目錄樹內容

          注意使用svnlook tree命令時,有時我們不想看到整棵目錄樹的內容,而只想看到某個分支的內容,那么我們就可以使用svnlook tree REPOS_PATH PATH_IN_REPOS的形式。另外要注意的是沒有svn list PATH SUB_PATH的形式。



          -------------------------------------------------------------
          生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
          posted on 2009-12-07 16:12 Paul Lin 閱讀(700) 評論(0)  編輯  收藏 所屬分類: 項目管理
          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 保定市| 丹棱县| 尼勒克县| 花莲市| 河北区| 天长市| 平山县| 定陶县| 鸡西市| 施甸县| 财经| 镇赉县| 乐至县| 平南县| 尼勒克县| 高密市| 灵璧县| 乌拉特中旗| 巴塘县| 湘阴县| 城市| 禄劝| 金塔县| 开平市| 平阳县| 二连浩特市| 手游| 平昌县| 舞阳县| 绥滨县| 文安县| 庄浪县| 界首市| 铜川市| 乌拉特后旗| 平邑县| 麟游县| 嘉峪关市| 新源县| 盖州市| 义马市|