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语法:
<Location /repos>
DAV svn
SVNPath F:/svn/repos
</Location>
如果你计划支持多个具备相同父目录的Subversion版本库,你有另外的选择,SVNParentPath指示,来表示共同的父目录。举个例子,如果你知道会在/usr/local/svn下创建多个Subversion版本库,并且通过类似http://my.server.com/svn/repos1,http://my.server.com/svn/repos2的URL访问,你可以用后面例子中的httpd.conf配置语法:
<Location /svn>
DAV svn
SVNParentPath F:/svn
</Location>
使用上面的语法,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用于指定密码文件位置。
如下所示:
<Location /svn>
DAV svn
SVNParentPath F:/svn
AuthType Basic
AuthName "zzl_lsz's svn repository"
AuthUserFile "F:/apache2.2/conf/svn-auth-file"
</Location>
此时,这些设置告诉Apache当需要授权时,需要向Subversion客户端索要用户名和密码,但是还需要告诉Apache什么样的客户端需要授权的指示。哪里需要授权,哪里需要认证,最简单的方式是保护所有的请求,通过Require valid-user来告诉Apache任何请求需要认证的用户。
<Location /svn>
DAV svn
SVNParentPath F:/svn
AuthType Basic
AuthName "zzl_lsz's svn repository"
AuthUserFile "F:/apache2.2/conf/svn-auth-file"
Require valid-user
</Location>
此时就设置好了版本库的认证。
通过重新启动Apache服务器,然后再次输入:http://localhost:8080/svn/repos/时,将会弹出认证对话框。提示如下的消息:
http://localhost:8080 の "zzl_lsz's svn repository" に対するユーザ名とパスワードを入力してください
只有输入正确的用户名和密码才可以访问版本库。
Apache + Subversion还可以基于路径来对用户进行授权,诸如哪些用户对哪些路径具有哪些权限。
在此不作介绍。
推荐文章:
请参考IBM DW文章:
<用 Apache 和 Subversion 搭建安全的版本控制环境>
http://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/
关于配置过程中可能出现的一些问题,例如修改Apache HTTP服务器的httpd.conf文件后Apache服务器无法启动等,关于这些问题请参考:
http://www.zxlm.cn/fh/thread-7317-1-1.html
3.CollabNet Subversion
可以在下面的URL中获取CollabNet Subversion的windows版本安装程序。
http://www.open.collab.net/downloads/subversion/
该版本中包含了Apache 2.2.8,ViewVC1.0.7以及Subversion1.5.6.
下载后进行安装。
注:在安装的第二个步骤中,会有如下的链接提示:
View installation information on openCollabNet
在这个链接中提供了针对该版本安装程序的安装帮助以及注意事项,例如笔者安装的帮助为:
http://www.collab.net/nonav/downloads/subversion/readme/svn_1_5_server_client_windows.html
该帮助中提及了对平台和配置的要求,重要的说明(Apache 2.0 -> 2.2),安装技巧,ViewVC的安装(必须有ActivatePython2.5.x的支持),升级过程,安装后的指南等等。
笔者希望使用ViewVC来更好的浏览版本库中的内容,所以需要安装ActivatePython2.5.x。
下载ActivatePython2.5.4.3并安装。
http://downloads.activestate.com/ActivePython/windows/2.5/ActivePython-2.5.4.3-win32-x86.msi
安装完成之后,开始安装CollabNet Subversion:
a.在"choose components"画面选择全部的components。
此处包含了SVNSERVE和Apache两个组件。
b.在"svnserve configuration"画面保留默认的port,并设置自定义的repository path,推荐使用X:/svn,其中X为驱动器盘符。不选中"installsvnserve to run as windows service"。安装完成后手动启动该服务。
c.在"apache configuration"画面进行如下的设置:
Host/Server Name:localhost
Host Port:选择未被占用的Port,例如10270
不选中"Install Apache to run as a Windows service"
Repository Path:自定义的版本库路径
Repository Local Prefix:/svn
选中"Enable ViewVC",此时在下一步中会选择Active Python 2.5的安装路径。
d.选择Active Python的安装路径。
e.在"Choose Install Location"画面选择要安装的目标路径。
然后进行安装。直至安装结束。
安装结束后,可以通过svnserve或者apache的方式来配置svn服务器,笔者将使用svnserve来配置版本库。
a.打开命令行提示符,进入到在上述安装中b步骤设置的版本库,然后使用svnadmin命令创建版本库。
F:/>cd svn_collabnet_svnserve
F:/svn_collabnet_svnserve>svnadmin create my-first-database
b.创建密码文件
使用文本编辑器编辑F:/svn_collabnet_svnserve/my-first-database/svnserve.conf文件。在配置文件中,可以看到如下的内容:
#password-db = passwd
将注释用的#号去掉。
c.设置用户和密码
使用文本编辑器编辑passwd文件F:/svn_collabnet_svnserve/my-first-database/,创建用户和密码。
joe = super-secret
可以添加任意个用户。
d.取消防火墙限制
在启动服务之前,确保防火墙没有阻止该端口的使用。
可以在下面的链接中查看相关的设置方法:
http://www.microsoft.com/windowsxp/using/security/internet/sp2_wfexceptions.mspx
svnserve.exe是程序名称,端口号默认为3690。
注:如果没有设置防火墙,那么在下一步中启动服务器时,windows也会弹出提示框,确认是否解除阻止。
e.启动服务
如果选择了将svnserve作为系统服务,那么可以使用
net start svnserve
来启动服务,否则的话,可以使用
svnserve -d -r F:/svn_collabnet_svnserve
来启动服务。
f.设置权限
可以给匿名用户设置访问(读/写)权限。
修改F:/svn_collabnet_svnserve/my-first-database/svnserve.conf文件,通过设置
anon-access = write
anon-access = read
anon-access = none
来为匿名用户设置写权限,读权限和无权限。
g.检出项目
svn co svn://localhost/repository_name
例如
svn co svn://localhost/my-first-repos
使用Apache服务器的配置方式与Apache + SVN win32的方式类似,只是CollabNet已经添加好了LoadModule以及SVNParentPath的设置。
只需要添加
<Location /my-first-repos>
DAV svn
SVNParentPath F:/svn_collabnet_apache/my-first-repos
</Location>
即可。
同时CollabNet已经添加了viewvc的配置:
<Location /viewvc>
#Require valid-user
AuthType Basic
AuthName "Subversion repository"
#AuthUserFile "F:/CollabNet_Subversion/httpd/conf/svn_auth_file"
</Location>
添加完成后,启动Apache服务器。
在浏览器中输入http://localhost:8090/svn/my-first-repos/,可以看到my-first-repos的修订版本号为0。
可以通过viewvc更加直观的查看svn的内容:http://localhost:8090/viewvc/my-first-repos/
4.VisualSVN Server
首先,VisualSVN Server是完全免费的SVN服务器。
其次,VisualSVN只通过一个安装程序包来安装Subversion,Apache以及管理控制台。
同时,VisualSVN(不是VisualSVN Server)是一个用于将Subversion集成到VisualStudio的工具。
VisualSVN Server是一个小巧,安装简单,包含了最新的组件,易升级的软件,同时可以作为windows平台上的企业级的服务器,包含了稳定的Apache软件,支持SSL链接,SSL证书管理,Apache目录认证和授权,并支持组的概念。
另外,VisualSVN Server具有用户友好的管理控制台。
下载VisualSVN Server:http://www.visualsvn.com/files/VisualSVN-Server-1.6.3.msi
该版本中包含Apache 2.2.9,Subversion1.5.5
安装过程非常的简单:
在"Custom Setup"画面,进行主要的设置工作:
Location:选择自定义的VisualSVN安装路径
Repositories:设置版本库的父目录。
Server Port:设置是否使用https以及使用的端口。
Authentication:可以设置是使用windows认证还是Subversion认证。
(笔者没有使用安全的http连接,端口设置为8070,使用Subversion认证。)
设置完成后,进行安装,直至完成。
安装完成后,启动VisualSVN Server管理控制台
在未创建任何repository之前,VisualSVN Server管理控制台主画面显示内容如下:
Status
VisualSVN Server is running
Server URL is http://vic-working:8070/svn/
Accounts
There are 0 users and 0 groups.
Create new user...
Create new group...
Repositories
Total 0 repositories.
Create new repository...
Import existing repository...
可以看到,在该管理画面中,可以查看Server URL,创建用户和组,创建新的版本库,导入已经存在的版本库。
该管理控制台和windows系统的计算机管理控制台,或者MS SQLServer2000的管理控制台类似,通过快捷菜单进行服务器的启动与关闭。
完全是windows风格的管理控制台。
由于笔者不方便拷贝屏幕,所以就不将snapshots放在本文中。
5.SlikSVN
下载win32版本的Slik SVN 1.5.6版本:http://www.sliksvn.com/pub/Slik-Subversion-1.5.6-win32.msi
下载完成后,进行安装。
在"choose setup type:"画面选择安装的类型,典型安装,自定义安装以及完全安装。
选择自定义安装,进入到"Cust Setup"画面:
这里默认svnserve和extra tools为非选中状态。按照默认的组件设置,进行安装。
这个工具不包含Apache组件,只是一个独立的命令行客户端。
关于命令行客户端的命令使用,请参考Subversion使用手册。
6.参考资料
Subversion主页:http://www.tigris.org/
如果你想更加深入的了解Subversion,Subversion的帮助手册是最好的参考:
Subversion中文帮助:http://www.subversion.org.cn/svnbook/
Subversion英文帮助:http://svnbook.red-bean.com/index.en.html
Subversion服务器相关配置(包含在帮助文档中):http://svnbook.red-bean.com/nightly/en/svn.serverconfig.html
CollabNet主页:http://www.open.collab.net/
VisualSVN主页:http://www.visualsvn.com/
SilkSVN:http://www.sliksvn.com/en/home/
SVN Win32 Lib:http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91&expandFolder=91&folderID=260
Apache HTTP Server:http://httpd.apache.org
Eclipse主页:http://www.eclipse.org
SubEclipse主页:http://subclipse.tigris.org/
Subclipse Eclipse update site URL: http://subclipse.tigris.org/update_1.4.x
CollabNet Eclipse update site URL
For Eclipse 3.4, copy this URL:
http://downloads.open.collab.net/eclipse/update-site/e3.4
For Eclipse 3.3, copy this URL:
http://downloads.open.collab.net/eclipse/update-site/e3.3
For Eclipse 3.2, copy this URL:
http://downloads.open.collab.net/eclipse/update-site/e3.2
Tortoise SVN Client:http://tortoisesvn.tigris.org/
7.总结
一般来将,如果作为企业级的业务应用,可能不会选择svn,比如超过1个GB的项目,例如Google的Android的版本控制工具采用了Git来控制,还有IBM公司也使用自身的资源管理工具ClearCase,但是作为小型的项目,或者群组项目,例如Apache使用的版本控制工具基本上都是svn,而如果个人开发者为了方便版本的管理,也可以采用SVN。
一般软件公司使用SVN的也比较多,但是可能会要求SSL连接以及高级的权限设置,而如果是个人开发者,笔者推荐(在windows环境下)VisualSVN这个工具,最主要的原因就是方便易用,全部是图形界面,不需要使用svn命令来创建存储库等操作。
(笔者发现本文被查看的次数比较多,所以对内容进行了一下排版,例如粗体,斜体等的控制,以便于阅读。)