简介


Svn已经不容质疑的成为了一款流行的代码控制工具,但是你是否还在为配置它服务器侧而苦恼呢? 你是否每次安装服务器时还要去安装apache以及进行配置呢?你是否还在为那命令行的用户创建及权限控制而郁闷呢?



Visualsvn解决了以上你所面对的一切问题,真的它把我们的工作效率提高了n倍.



Visualsvn是完全开源和免费的,当然它的客户端并不免费,不过没关系,客户端有太多的免费版本供我们选择,TortoiseSVN就是一个不错的选择.遗憾的是我这里并不介绍客户端的使用,有兴趣的同学可以到官方网站去学习.


安装


首先到官方网站上获取一个版本http://www.visualsvn.com/server/download/


然后只需要next就ok了;



当然有些地方是可以配置一下的,下面列出一些需要简单设置的界面






服务器创建svn仓库 svn服务器创建用户_svn


当然服务器和管理控制工具都装上




服务器创建svn仓库 svn服务器创建用户_svn_02


这里可以修改代码库的保存位置,默认为"D:\Repositories\".


也可以修改访问代码库的方式http或https.


最下面是选择用户认证是使用windows用户还是Subversion自己的认证.


安装完后的界面



服务器创建svn仓库 svn服务器创建用户_开发工具_03


第一步、创建用户组

开发组,管理组,测试组,等等


服务器创建svn仓库 svn服务器创建用户_代码库_04


第二步、当然是创建用户



服务器创建svn仓库 svn服务器创建用户_服务器创建svn仓库_05

第三步、当然是对用户进行分组,编辑用户组




服务器创建svn仓库 svn服务器创建用户_服务器创建svn仓库_06


最后是创建代码库:在Repositories上右键-->Create New Repository-->创建第一个代码仓库

服务器创建svn仓库 svn服务器创建用户_代码库_07

当然也可以创建多个代码库,但是我觉得这样不方便,比如在MyEclipse或TortoiseSVN客户端连接SVN服务器时无法列出所有项目,只能列出当前一个项目,不太方便,后面会说到.

这里我使用的是只创建一个代码库repos,在这个代码库下面再创建多个项目的文件夹,对第每个项目文件夹进行权限控制。


服务器创建svn仓库 svn服务器创建用户_svn_08


这里在代码库repos下创建了三个文件夹,代表三个项目,可以对根目录和子目录进行权限控制,比如Repositories和repos目录所有用户都只有读取权限,但没有写入的权限.


在使用过程中遇到的问题:

1、 安装VisualSVN Server过程中出现错误,无法启动VisualSVN服务


安装到最后一步出错,


提示为VisualSVB服务无法启动,查看日志,提示:


“Product: VisualSVN Server 2.1.4 — Error 1920. Service ‘VisualSVN Server’ failed to start. Please check VisualSVN Server log in Event Viewer for more details.”

这个是服务账户启动服务失败,可能是bug,解决方法:


打开系统服务services.msc,发现VisualSVN Server没有启动成功:



服务器创建svn仓库 svn服务器创建用户_服务器创建svn仓库_09



把登录身份改为”本地系统账户“后,就可以启动了,也安装成功了。


2、使用TortoiseSVN客户端浏览版本库


提示:版本库永久移动到https://192.168.1.100/svn;请重新定位

1)在IE浏览器里通过 https://192.168.1.100/svn 可以正常浏览所有项目

2)使用Tortoise SVN 浏览 https://192.168.1.100/svn ,提示: "版本库永久移动到"https://192.168.1.100/";请重新定位

3)使用TortoiseSVN 浏览 https://192.168.1.100/svn/test 又正常


4)myeclipse中也是无法浏览所有项目,报301 Moved Permanently 的错误 ,只能单个项目浏览、导出和同步。


不知道问题出在哪,网上也找了很多解决办法,都不是


后面也且发现一个问题,就是使用TortoiseSVN可以把任何项目导入SVN根目录中,因为原先没有在代码库下创建文件夹表示每个项目,而是使用TortoiseSVN直接导入项目的(比如把项目machine_es直接导入https://192.168.123.100/svn/repos/machine_es,注意我没有创建machine_es的文件夹,这样也可以导入),所以无法对每个导入的项目进行权限控制,只要对整个仓库的权限的用户都可以把任何项目导入仓库的任何地方,这不是很危险?


后来发现是创建代码库的方式不正确,原先的流程是:


1、创建代码仓库


2、直接创建TortoiseSVN导入项目


正确的方式应该是:


1、创建代码仓库


2、在代码仓库下面以项目名称创建文件夹,当然也可以通过TortoiseSVN在根目录下创建文件夹


3、使用TortoiseSVN导入项目



这样所有问题都没有了,即可以控制每个项目的权限,客户端也可以列出所有项目


3、导入项目的时候,不能把classes目录下的编译类文件导入SVN库中,不然在同步的时候会报错


org.tigris.subversion.javahl.ClientException:Working copy not locked;this is probably a bug,please report 

svn:Working copy'D:\workspace\machine_es\WebRoot\WEB-INF\classes\com'is missing or not locked


原来是myeclipse把src文件夹中的.svn文件夹也"编译"到WEB-INF/classes中去了,而复制过来的.svn中存储的是src文件夹中的版本信息,从而导致在更新时出错。


首先在导入SVN库时,要删除classes下的com目录;


其次设置myeclipse:


在myEclipse中的项目右键->Properties->JavaBuildPath菜单,在右侧面板中的"Source"选项卡,在Excluded中加

入"**/.svn/**"。

也就是把.svn文件夹从编译路径中排除,这样就不会出现上面的问题了。