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 阅读(601) 评论(0)  编辑  收藏 所属分类: 项目管理

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(19)

随笔分类

随笔档案

BlogJava热点博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜