有一些情况下,不能使用Apache作为你的服务器,Subversion包括Svnserve-一个轻型的独立服务器,使用普通TCP/IP连接之上的自定义协议。
大多数情况下svnserve的设置更加简单,也比Apache的服务器更加快。
从http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91得到最新版本的Subversion。
如果你已经安装了Subversion,svnserve已经运行,你需要在继续之前把它停下来。
运行Subversion安装程序,如果你在你的服务器上运行,可以跳过第4步。
打开资源管理器,进入Subversion的安装目录(通常是C:\Program Files\Subversion
)的bin
目录,找到文件svnserve.exe
,intl3_svn.dll
,libapr.dll
,libapriconv.dll
,libapriutil.dll
,libdb*.dll
,libeay32.dll
和ssleay32.dll
,复制这些文件,或所有bin
目录内的文件到你的服务器目录,例如c:\svnserve
。
现在svnserve已经安装了,你需要在你的server运行它,最简单的方法是在DOS窗口或者windows快捷方式输入:
svnserve.exe --daemon
svnserve将会在端口3690等待请求,--daemon选项告诉svnserve以守护进程方式运行,这样在手动终止之前不会退出。
如果你没有创建一个版本库,根据下面的Apache服务器设置指令第 3.1.4 节 “配置”。
为了验证svnserve正常工作,使用
→ 来查看版本库。假定你的版本库位于c:\repos\TestRepo
,你的服务器叫做localhost
,输入:
svn://localhost/repos/TestRepo
当被版本库浏览器提示输入。
你也可以使用--root选项设置根位置来限制访问服务器的目录,从而增加安全性和节约输入svnserve URL的时间:
svnserve.exe --daemon --root drive:\path\to\repository
以前面的测试为例,svnserve运行命令为:
svnserve.exe --daemon --root c:\repos
然后在TortoiseSVN中我们的版本库浏览器URL缩短为:
svn://localhost/TestRepo
注意,当svnserve和版本库位于不同分区或盘符时也需要--root选项。
Svnserve 可以提供任意数量的版本库服务。只要将这些版本库放到你刚才定义的根目录下即可,然后使用相对于根的URL访问它们。
警告 | |
---|---|
不要创建和访问网络共享上的 Berkeley DB 版本库,它不能存在于一个远程的文件系统,即使是映射到盘符的共享。如果你希望在网络共享使用 Berkeley DB,结果难以预料-你可能会立刻看到奇怪的错误,也有可能几个月之后才发现数据库已经损坏了。 |
如果你关心有必须有用户登录才能运行svnserve,或者担心有人关闭了svnserve而忘了重新启动,可以将svnserve设置为windows服务,从Subversion1.4开始,svnserve可以作为windows服务安装,在以前可以使用包裹器安装。
为了将svnserve安装为windows服务,执行下面的命令,就会创建一个会随windows自动启动的服务。
sc create svnserve binpath= "c:\svnserve\svnserve.exe --service --root c:\repos" displayname= "Subversion" depend= tcpip start= auto
提示 | |
---|---|
Microsoft现在建议服务运行于本地服务或网络服务帐户,参考The Services and Service Accounts Security Planning Guide。以本地服务帐户创建服务,需要在例子里追加下面几行。 obj= "NT AUTHORITY\LocalService" 请注意需要给本地服务帐户一些目录的适当权限,包括的Subversion和你的版本库,还有所有钩子脚本使用的应用。 |
为了使用包裹器安装svnserve,一个人为svnserve编写了SvnService
。Magnus Norddahl采用了微软的骨架代码,Daniel Thompson做了进一步的改进。Daniel的版本可以从tigris.org下载。
许多更原始的工具像firedaemon也可以工作,请注意你仍然需要使用--daemon选项运行svnserve。
最后,如果你可以访问Windows 2000/XP/2003资源工具箱,你可以使用来自微软的SrvAny,这是微软官方的运行服务的方法,但是有一点混乱(需要编辑注册表),而且如果停止服务,它会直接杀掉svnserve,而不会让svnserve进行清理。如果你不想安装所有的资源工具箱,你可以只从Daniel Petri下载SrvAny组件。
缺省的svnserve设置提供了匿名的只读访问,这意味着你可以使用svn://
的URL进行检出和更新,或者使用TortoiseSVN的版本库浏览器查看版本库,但是不能提交任何修改。
为了打开对版本库的写访问,你可以编辑版本库目录的conf/svnserve.conf
文件,这个文件控制了svnserve守护进程的配置,也提供了有用的文档。
为了打开匿名的写访问,只需要简单得设置:
[general] anon-access = write
然而,你不会知道谁修改了版本库,因为svn:author
属性是空的,你也不能控制谁来修改版本库,这是一个很危险的设置。
解决这个问题的一个方法是创建密码数据库:
[general] anon-access = none auth-access = write password-db = userfile
这里userfile
与svnserve.conf
文件在同一个目录,这个文件也可以存在于文件系统的其他地方(当多个版本库使用相同的访问权限时尤其有用),并使用绝对路径引用,或者是conf
的相对目录,使用\或盘符不能工作。userfile
的结构如下:
[users] username = password ...
这个例子拒绝所有的未认证用户(匿名)访问,给userfile
中的用户读写权限。
另一种svnserve认证的方法是使用SSH来建立请求通道。
通过此方法,svnserve不会作为守护进程启动,而是SSH为你启动svnserve,以SSH授权用户运行,为此,你需要在你的服务器上有SSH守护进程。
详细描述安装和设置SSH已经超过了本文的范围,然而你可以在TortoiseSVN FAQ里查找“SSH”。
更多的关于svnserve的信息可以看《使用 Subversion 进行版本管理》。
从Subversion1.3开始,svnserve支持与mod_authz_svn
相同的路径为基础的授权模式,你需要编辑版本库路径下的conf/svnserve.conf
引用的授权文件。
[general] authz-db = authz
在这里,authz
是你创建用来定义访问权限的文件,你可以为每一个版本库使用单独的文件,或者为所有的版本库使用相同的文件,关于此文件的格式可以查看第 3.1.6 节 “路径为基础的授权”。