windows下构建简单的svn服务器

转自:http://developer.51cto.com/art/201005/202732.htm

一、准备工作

获取TortoiseSVN客户端程序
从官方网站http://tortoisesvn.net/downloads获取最新的TortoiseSVN。TortoiseSVN是一个客户端程序,用来与subvers服务器端通讯。Subversion自带一个客户端程序svn.exe,但TortoiseSVN更好操作,提高效率。TortoiseSVN的bin目录下也有svnserve.exe文件,用来启动svn服务器,我下载的1.7版本中有该文件,但是在1.4版本中没有该文件。

建立版本库(Repository)

运行Subversion服务器需要首先要建立一个版本库(Repository)。版本库可以看作是服务器上集中存放和管理数据的地方。

开始建立版本库。首先建立 e:\svn 空文件夹作为所有版本库的根目录。然后,进入命令行并切换到subversion的bin目录。输入如下命令:

svnadmin create E:\svn\repos1

此命令在 E:\svn 下建立一个版本库 repos1

可以使用TortoiseSVN图形化的完成这一步:先建立空目录E:\svn\repos1,注意一定是要空的。然后在repos1文件夹上“右键->TortoiseSVN->CreateRepositoryhere...”,确定即可,然后就自动创建了一系列文件夹和文件,同命令行建立的一样。

运行独立服务器
此时subversion服务还没有开始,只是通过它的命令建立了版本库。在E:\svn下打开命令提示符窗口输入:

svnserve.exe--daemon

svnserve将会在端口3690等待请求,--daemon(两个短横线)选项告诉svnserve以守护进程方式运行,这样在手动终止之前不会退出。注意不要关闭命令行窗口,关闭窗口会把svnserve停止。为了验证svnserve正常工作,使用TortoiseSVN->Repo-browser来查看版本库。在弹出的URL对话框中输入:
svn://localhost/svn/repos1点OK按钮后就可以看见repos1版本库的目录树结构了,只不过这时repos1是个空库。你也可以使用--root选项设置根位置来限制服务器的访问目录,从而增加安全性和节约输入svnserveURL的时间:

svnserve.exe --daemon --root e:\svn
然后TortoiseSVN中的版本库浏览器URL缩减为:svn://localhost/repos1 你可能会问这样岂不是每次启动SVN服务器都要输入一次命令?怎样才能让SVN服务器在开机的时候自动启动呢?答案就是将SVN服务注册到Windows系统服务,在Windows命令提示符里执行命令

sc create SVN binpath="\"d:\subversion\bin\svnserve.exe\" --service -r e:\svn" displayname="SVN Service" depend=Tcpip start=auto

,这个命令是不是有点长?其实很容易理解,sc是Windows自带的系统服务注册工具,微软支持中心提供了详细的说明,这里我就不再复述了,参数binpath="\"d:\subversion\bin\svnserve.exe\"--service-rF:\SVN"和我们前面手动启动SVN服务器的命令很像吧?只是把-d改成了--service,这不难理解,因为现在是服务嘛。
PS:如果想从系统服务里删除刚才注册的SVN服务可以使用sc delete SVN命令。我们再来看一下Windows下架设svn服务器过程中如何配置用户和权限。

在apache服务器中使用

1. Copy bin/mod_dav_svn.so and bin/mod_authz_svn.so to the Apache modules directory.
2. Add the Subversion/bin directory to the SYSTEM PATH and reboot so all the Subversion
   support dll's are visible to the Apache service.
3. Edit the Apache configuration file (httpd.conf) and make the following changes:

  3a. Uncomment the following two lines:

      #LoadModule dav_fs_module modules/mod_dav_fs.so
      #LoadModule dav_module modules/mod_dav.so

  3b. Add the following two lines to the end of the LoadModule section:

      LoadModule dav_svn_module modules/mod_dav_svn.so
      LoadModule authz_svn_module modules/mod_authz_svn.so

  3c. Add the following to end of the file. Note: This Location directive is a
      minimal example with no authentication directives. For other options,
      especially authentication options, see the Subversion INSTALL file,
      the Subversion Book, or the TortoiseSVN Manual.

<Location /svn>
DAV svn
SVNPath E:\svn\repos1
</Location>

配置用户和权限
用文本编辑器打开E:\svn\repos1\conf目录,修改svnserve.conf,将:
#password-db=passwd改为:
password-db=passwd
即去掉前面的#注释符,注意前面不能有空格。然后修改同目录的passwd文件,增加一个帐号:将:
[users]
#harry=harryssecret
#sally=sallyssecret增加帐号:
[users]
#harry=harryssecret
#sally=sallyssecret
test=test

六、初始化导入
Windows下架设svn服务器如何进行初始化导入。下面就是将我们的数据(项目)导入到这个版本库,以后就由版本库管理我们的数据。我们的任何改动都回被版本库记录下来,甚至我们自己丢失、改错数据时版本库也能帮我们找回数据。
比如,我在d:\wwwroot下有个guestbook文件夹,里面存放的是我编写的留言簿程序。在此文件夹上“右键->TortoiseSVN->Import...”,在弹出对话框的“URLofrepository”输入“svn://localhost/repos1/guestbook”。在“Import message”输入“导入整个留言簿”作为注释。点OK后要求输入帐号。我们在用户名和密码处都输入test。完成后guestbook中的内容全部导入到了svn://localhost/svn/repos1/guestbook。我们看到在e:\svn\repos1没有任何变化,连个guestbook文件夹都没有建立,唯一的变化就是e:\svn\repos1容量变大了。实际上我们源guestbook中的内容已经导入repos1版本库了,源guestbook文件夹可以删除了。
需要注意的是,这一步操作可以完全在另一台安装了TortoiseSVN的客户机上进行。例如运行svnserve的主机的IP是133.96.121.22,则URL部分输入的内容就是“svn://133.96.121.22”。

基本操作流程
1、取出(checkout)
取出版本库到一个工作拷贝:来到任意空目录下,比如在f分区建立一个空文件夹f:\work。“右键->SVNCheckout”。在“URLofrepository”中输入“svn://localhost/svn/repos1/guestbook”,这样我们就得到了一份guestbook中内容的工作拷贝。
2、存入(checkin)/提交(commit)
在工作拷贝中作出修改并提交:
在guestbook工作拷贝中随便打开一个文件,作出修改,然后“右键->SVNCommit...”。这样我们就把修改提交到了版本库,版本库根据情况存储我们提交的数据。
在修改过的文件上“右键->TortoiseSVN->ShowLog”,可以看到对这个文件所有的提交。在不同的revision条目上“右键->Compare with working copy”,我们可以比较工作拷贝的文件和所选revision版本的区别。

补充

sc create SVN binpath= "\"d:\subversion\bin\svnserve.exe\" --service -r e:\svn" displayname= "SVN Service" depend= Tcpip start= auto 注意=后面后空格,字母r前是一个-,如果使用root这个单词就要使用--两个横线。

svn不能提交给两个仓库中,即一个目录只能访问一个svn仓库。但是svn和git可以在同一个项目目录中共存,只需要在svn中右键选择.git文件夹,TortoiseSVN中选择add to ignore即可。对应的在TortoiseGit中将.svn文件夹add ignore,git中的ignore是一个.gitignore文件,同样还要在svn中将该文件也add ignore。

如果要查看当前目录下的所有ignore list可以右键看看该文件夹的属性(windows系统的)在subversion标签下点击Properties,就可以看到svn:ignore属性,值为.git .gitignore。通过这种方式添加的ignore列表是针对该项目的,如果在TortoiseSVN修改global ignore则是对所有的项目都通用的忽略列表,在用户目录的application data的subversion目录的config文件中配置。

如果我们想把一个svn目录实际应用不需要其中的.svn目录,可右键点该目录在TortoiseSVN中选择export即可,这样导出的文件夹中就没有.svn目录了。

如果只是要删除.svn目录可以利用windows的搜索功能,搜索所有的.svn一次性全部删除。

本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

posted @ 2012-02-07 06:46  莫忆往西  阅读(281)  评论(0编辑  收藏  举报