【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 閱讀(694)
評論(0) 編輯 收藏 所屬分類:
項目管理