Subversion Tools(几种Subversion工具的安装使用)


Subversion Tools(几种Subversion工具的安装使用)
2011年05月18日
    Subversion Tools(几种Subversion工具的安装使用)                     
  0.关于Subversion
  Subversion具有以下的特点:
  几乎所有的CVS特点-Subversion的初衷就是开发一个更好的CVS。
  目录和文件都被版本化。
  拷贝、删除操作被版本化。
  灵活的版本化metadata。
  commit原子化。
  Branching和tagging简单易用。
  整合tracking。
  文件locking。
  符号链接可以被版本化。
  Apache网络服务器选项,通过WebDAV/DeltaV协议。
  独立的服务器选项-svnserve。
  可转换的输出。
  本地化消息。
  可交互的冲突解决方案。
  Repository只读映射。
  ....
  关于更详细的信息,请参考:http://subversion.tigris.org/features.html
  关于Subversion的FAQ列表,中文翻译小组进行了翻译,请参考http://subversion.tigris.org/faq.zh.html。感谢中文翻译小组所作出的贡献。
  一个典型的Subversion工作流程如下(摘自Subversion中文帮助):
  典型的工作周期是这样的:
  更新你的工作拷贝
  svn update
  做出修改
  svn add
  svn delete
  svn copy
  svn move
  检验修改
  svn status
  svn diff
  可能会取消一些修改
  svn revert
  解决冲突(合并别人的修改)
  svn update
  svn resolved
  提交你的修改
  svn commit
  SVN的命令集如下:
  add
  blame (praise, annotate, ann)
  cat
  checkout (co)
  cleanup
  commit (ci)
  copy (cp)
  delete (del, remove, rm)
  diff (di)
  export
  help (?, h)
  import
  info
  list (ls)
  lock
  log
  merge
  mkdir
  move (mv, rename, ren)
  propdel (pdel, pd)
  propedit (pedit, pe)
  propget (pget, pg)
  proplist (plist, pl)
  propset (pset, ps)
  resolved
  revert
  status (stat, st)
  switch (sw)
  unlock
  update (up)
  可以使用svn help或者svn help subcommand(例如svn help checkout)来获取帮助。
  一般来说,使用图形化的GUI来作为Subversion的客户端使得操作更加的简单易用,注入Toitorse SVN或者CollabNet的Subversion客户端工具,如果使用集成开发环境,例如Eclipse,MS Visual Studio,NetBeans等,都会具有对应的Subversion Plugin的支持,以去除手动使用SVN客户端命令的繁琐操作,另外使用命令行工具的一个缺点就是进行同步(diff)命令时,显示的格式不够用户友好(与集成IDE的插件相比)。
  所以本文主要介绍服务器端的版本库的搭建与设置,而不涉及客户端的使用(命令行或者IDE客户端)
  1.Subversion工具种类
  如果仅仅需要安装一个版本库,那么只需要构建一个Subversion客户端,客户端可以是命令行客户端,也可以是GUI客户端。
  如果需要一个网络的版本库,那么需要安装Apache2服务器或者一个svnserve服务器。
  相对于win32的发布包,Subversion更多的应用于*nix服务器,毕竟就稳定性可安全性而言,*nix系列服务器要优于windows服务器(笔者个人认为)。
  可以在如下链接:http://subversion.tigris.org/getting.html获取各个操作系统的Subversion工具。
  本文中的操作系统平台为Win32。
  接下来笔者将根据以下几种方式搭建SVN网络服务器。
  a.Tigris.org : svn-win32-1.5.5 + Apache 2.2.11
  http://subversion.tigris.org/files/documents/15/44589/svn-win32-1.5.5
  http://labs.xiaonei.com/apache-mirror/httpd/binaries/win32/apache_2.2.11-win32-x86-openssl-0.9.8i.msi
  b.CollabNet (Certified binaries)
  CollabNetSubversion-server-1.5.5-1
  http://downloads-guests.open.collab.net/files/documents/61/1373/CollabNetSubversion-server-1.5.5-1.win32.exe
  c.VisualSVN (VisualSVN Server)
  VisualSVN-Server-1.6.3
  http://www.visualsvn.com/files/VisualSVN-Server-1.6.3.msi
  (基于Subversion1.5.5版本构建)
  d.SlikSVN
  SlikSVN1.5.6
  http://www.sliksvn.com/pub/Slik-Subversion-1.5.6-win32.msi
  上述软件均为开源软件。其中CollabNet公司对开发Subversion的部分全职工作人员提供薪水,并且拥有部分Subversion代码的版权,但是该版权是BSD/Apahce风格的版权,即可以随心所欲的去下载,修改,或者重新发布新的版本,而不需要经过CollabNet公司或者其他任何一个人的许可。
  FAQ:我现在所运行的是Apache 1.x,但是我不能仅仅为了支持Subversion版本库而将其转换成Apache 2.0。这是否意味着我不能使用Subversion服务器?
  不必,你可以用svnserve作为Subversion的服务器,它可以很好的工作。
  在使用Apache server时,如果你想使用分布式创作和版本管理协议(WebDAV)和所有其他一些好的功能特性,那么是的,你需要Apache 2.0。但是不管怎样,当你继续在80端口运行Apache1.0的时候,你总是可以在另外一个不同的端口运行Apache2.0。不同版本的 Apache可以在同一台机器上很好的和平相处。仅仅需要在改变httpd.conf文件中把Listen指令从80改成8080,或者其他你想要改成的端口。然后确保在你公布版本库的URL的时候加以说明:(例如,http://svn.mydomain.com:8080/repos/blah/trunk/)。
  2.Subversion Win32 + Apache 2.11
  a.安装SVN:将Subversion Win32解压缩到本地目录,Subversion的安装路径为$SVN_HOME,例如F:\svn-win32-1.5.5。下文中使用$SVN_HOME表示SVN的安装目录。
  b.安装Apache HTTP服务器:执行安装程序,安装路径为$HTTPD_HOME,例如F:\apache2.2。下文中使用$HTTPD_HOME表示Apache HTTP服务器的安装目录。
  注:Apache HTTP服务器默认使用80端口,如果80端口已经被占用,请修改$HTTPD_HOME/conf/httpd.conf文件,将Listen 80修改为其他的端口。例如8080,9080等。
  安装完成后,默认会启动apache服务器,当任务栏图标状态为绿色的三角时,表示启动正常。
  也可以通过在浏览器中输入http://localhost:port/来进行测试。(默认情况下会打印It Works。)
  c.创建版本库并测试
  安装完Subversion Win32和Apache HTTP服务器之后,就是进行配置的工作了。
  首先在配置$HTTPD_HOME/conf/httpd.conf文件:
  使用LoadModule来加载mod_dav_svn模块,这个指示必须先与其它Subversion相关的其它配置出现,如果你的Apache使用缺省布局安装,你的mod_dav_svn模块一定在Apache安装目录的modules子目录,LoadModule指示的语法很简单,影射一个名字到它的共享库的物理位置:
  LoadModule dav_svn_module modules/mod_dav_svn.so
  注意,如果mod_dav是作为共享对象编译(而不是静态链接到httpd程序),你需要为它使用LoadModule语句,一定确定它在mod_dav_svn之前:
  LoadModule dav_module modules/mod_dav.so
  LoadModule dav_svn_module modules/mod_dav_svn.so
  将$SVN_HOME/bin/mod_dav_svn.so文件拷贝到$HTTPD_HOME/modules目录下。
  在你的配置文件后面的位置,你需要告诉Apache你在什么地方保存Subversion版本库(也许是多个),位置指示有一个很像XML的符号,开始于一个开始标签,以一个结束标签结束,配合中间许多的其它配置。Location指示的目的是告诉Apache在特定的URL以及子URL下需要特殊的处理,如果是为Subversion准备的,你希望可以通过告诉Apache特定 URL是指向版本化的资源,从而把支持转交给DAV层,你可以告诉Apache将所有路径部分(URL中服务器名称和端口之后的部分)以/repos/开头的URL交由DAV服务提供者处理。一个DAV服务提供者的版本库位于/absolute/path/to/repository,可以使用如下的httpd.conf语法:
  
  DAV svn
  SVNPath F:/svn/repos
  
  如果你计划支持多个具备相同父目录的Subversion版本库,你有另外的选择,SVNParentPath指示,来表示共同的父目录。举个例子,如果你知道会在/usr/local/svn下创建多个Subversion版本库,并且通过类似http://my.server.com/svn/repos1,http://my.server.com/svn/repos2的URL访问,你可以用后面例子中的httpd.conf配置语法:
  
  DAV svn
  SVNParentPath F:/svn
  
  使用上面的语法,Apache会代理所有URL路径部分为/svn/的请求到Subversion的DAV提供者,Subversion会认为SVNParentPath指定的目录下的所有项目是真实的Subversion版本库,这通常是一个便利的语法,不像是用SVNPath指示,我们在此不必为创建新的版本库而重启Apache。
  使用$SVN_HOME/bin/svnadmin命令,创建到repos版本库:
  svnadmin create f:/svn/repos
  此时打开浏览器,输入URL:http://localhost:8080/svn/repos/
  即可看到一个空的版本库,版本号为0。
  d.设置授权
  在上述步骤中搭建的版本库是没有权限的设置的,如果你的服务器可以被Internet访问,那么任何人都可以修改你的版本库,这通常是所不希望看到的。
  通过设置授权,可以使得特定的用户访问特定的版本库,或者特定的目录。
  由于Apache HTTP服务器提供了认证的功能,其中包括基本的HTTP认证以及SSL证书认证,由于配置SSL证书认证需要使用CA(认证中心)来办法服务器端以及客户端的证书,过程比较麻烦,并且对于一般的项目来说,基本的HTTP认证已经可以满足要求。笔者接下来将介绍HTTP认证的设置方法。
  首先,创建保存用户及密码的文件,这个过程通过apache HTTP服务器提供的htpasswd.exe来完成:
  F:\apache2.2\bin>htpasswd.exe -help
  Usage:
  htpasswd [-cmdpsD] passwordfile username
  htpasswd -b[cmdpsD] passwordfile username password
  htpasswd -n[mdps] username
  htpasswd -nb[mdps] username password
  -c  Create a new file.
  -n  Don't update file; display results on stdout.
  -m  Force MD5 encryption of the password (default).
  -d  Force CRYPT encryption of the password.
  -p  Do not encrypt the password (plaintext).
  -s  Force SHA encryption of the password.
  -b  Use the password from the command line rather than prompting for it.
  -D  Delete the specified user.
  On Windows, NetWare and TPF systems the '-m' flag is used by default.
  On all other systems, the '-p' flag will probably not work.
  F:\apache2.2\bin>htpasswd.exe -cm f:/svn-auth-file zzl
  New password: ********
  Re-type new password: ********
  Adding password for user zzl
  F:\apache2.2\bin>htpasswd.exe -m f:/svn-auth-file lsz
  New password: ********
  Re-type new password: ********
  Adding password for user lsz
  下一步,需要在httpd.conf文件中的Location标记中添加一些设置来告诉服务器如何使用密码文件。其中AuthType指定系统使用认证的类型,此时我们指定为Basic认证,AuthName是提供给认证区域的一个人以名称,用于显示在浏览器的弹出窗口里,最后,AuthUserFile用于指定密码文件位置。
  如下所示:
  
  DAV svn
  SVNParentPath F:/svn
  AuthType Basic
  AuthName "zzl_lsz's svn repository"
  AuthUserFile "F:/apache2.2/conf/svn-auth-file"
  
  此时,这些设置告诉Apache当需要授权时,需要向Subversion客户端索要用户名和密码,但是还需要告诉Apache什么样的客户端需要授权的指示。哪里需要授权,哪里需要认证,最简单的方式是保护所有的请求,通过Require valid-user来告诉Apache任何请求需要认证的用户。
  
  DAV svn
  SVNParentPath F:/svn
  AuthType Basic
  AuthName "zzl_lsz's svn repository"
  AuthUserFile "F:/apache2.2/conf/svn-auth-file"
  Require valid-user
  
  此时就设置好了版本库的认证。
  通过重新启动Apache服务器,然后再次输入:http://localhost:8080/svn/repos/时,将会弹出认证对话框。提示如下的消息:
  http://localhost:8080 の "zzl_lsz's svn repository" に

猜你喜欢

转载自ez773ez.iteye.com/blog/1359292
今日推荐