当前位置: 代码迷 >> CVS/SVN >> Ubuntu上配置SVN服务器
  详细解决方案

Ubuntu上配置SVN服务器

热度:10252   发布时间:2013-02-26 00:00:00.0
Ubuntu下配置SVN服务器

环境:Ubuntu12.04

目的:可本地或通过Web访问Subversion,可以通过eclipse中的SVN插件实现源代码管理。

?

???? 部门最近要在Ubuntu下搭建一个SVN服务器,刚刚完成了搭建工作,所以就自己的搭建工作进行一下简单的概括和介绍。由于部门不能连接外网,所以安装的软件要自己单独下载。算起来,前前后后一共安装了差不多17个软件,其中核心软件有4个apache2、libapache2-svn、subversion、subversion-tools。

????? 如果可以使用网络的话,安装就要简单得多。

??? 安装Subversion

?? apt-get install subversion

?? apt-get install subversion-tools

?

??? 安装Apache

?? apt-get install apache2

?? apt-get install libapache2-svn

?

下面就对apache2和subversion进行一系列的配置工作:

?

1.创建一个用户组来拥有文件仓库所在的目录
??? #sudo addgroup subversion
??? #sudo usermod -G subversion -a www-data
??? #cat /etc/group|grep subversion

2.创建SVN的版本仓库
??? #sudo mkdir /home/svn
??? #sudo mkdir /home/svn/src
??? #cd /home/src

? 创建组的权限
??? #/home/src#sudo chown -R root:subversion src
??? #/home/src#sudo chmod -R g+rws src

? 创建SVN的版本仓库
??? #sudo svnadmin create /home/svn/src

3.Apache配置

??? #sudo gedit /etc/apache2/mods-available/dav_svn.conf
? ??? 在文件中添加以下内容:
??? <Location /svn>
??? DAV svn
??? SVNParentPath /svn
??? AuthType Basic
??? AuthName "Subversion Repository"
??? AuthUserFile /etc/subversion/dav_svn.passwd(存放的用户名和经MD5加密的密码)
??? AuthzSVNAccessFile /etc/subversion/dav_svn.authz(存放组的信息和指定用户的权限授予情况)
??? <LimitExcept GET PROPFIND OPTIONS REPORT>(如果想每次登陆都输入密码请把这个引掉)
??? Require valid-user
??? </LimitExcept>
??? </Location>

?

<Location /svn>  意思是Subversion版本可用的URL是http://SubversionServerIP/svn

DAV svn  告诉Apache是哪个模块响应哪个URL的请求,在这里是Subversion模块

SVNParentPath?/home/svn  告诉Subversion需要查看的版本库在/home/svn之下。如果不希望为每个单独的项目都进行单独的设置,可以把所有项目都存放在统一的资源库目录,使用SVNParentPath指令来指定存放所有项目的路径。否则使用SVNPath

SVNPath  单版本库时使用此项指明版本库的路径,但在多版本库中不要使用此项

AuthType Basic  认证类型为基本认证,就是用户名和密码

AuthName?"Subversion repository"  认证名称,将在浏览器界面弹出一个对话框,标题为Subversion repository

AuthUserFile /etc/subversion/dav_svn.passwd  指定使用的认证密码文件,即访问版本库用户的文件,用apache的htpasswd命令生成

AuthzSVNAccessFile /etc/subversion/dav_svn.authz  设定访问版本库权限的文件

Require valid-user  要求验证用户,即不能匿名访问。如果没有该语句,则只能第一个用户可以访问新建库

此外,SVNIndexXSLT “/svnindex.xsl”  使用它可以在用浏览器时更好看



? 配置完成后,重启apache
??? #sudo /etc/init.d/apache2 restart

4.创建/etc/subversion/passwd文件,该文件包含了用户授权的详细信息

??? #sudo htpasswd -c /etc/subversion/passwd 要创建的用户名
??? 提示输入密码,当输入完成,该用户就建立了

??? 继续添加用户的话,重复上面的语句,去掉"-c"

??? 配置权限配置文件
??? #sudo gedit /etc/subversion/dav_svn.authz
??? 在文件中添加以下内容:
??? [groups]
??? administrator=admin

??? user=user1,user2
??? [src:/]
??? @administrator=rw? ####为管理员用户administrator赋予读写权限
??? @user=rw??????????????? ####为用户user赋予读写权限
??? *=r?????????????????????????? ####其他用户只有读的权限,没有“r”表示禁止访问

??? [doc:/]
??? @administrator=rw? ####为管理员用户administrator赋予读写权限

??? user1=r??????????????????? ####用户user1具有读的权限
??? *=???????????????

?

??? 其中* = 表示其它所有用户都没有任何权限。@表示用户组,*表示所有用户,[/]表示全部目录。

5.测试服务器是否创建成功,并调试可能出现的错误

??? 访问SVN文件仓库
??? #svn co http://localhost/svn/src /home/src --username 创建的用户名 --password 用户对应的密码(测试能否Checkout)
??? 。。。。看看/home/src/文件夹里面是不是有文件了?

??? 将文件/文件夹导入文件仓库
??? #sudo svn import -m src /project http://localhost/svn/src
??? 。。。。提交/project/里面的文件到http://localhost/svn/src







可能出现的问题:

1.新建组和为用户添加组时,需要重新登录Shell才能生效。

2.一个新的版本库被创建出来之后,用svn import命令导入代码的过程中,出现了Permission denied错误,这时需要在库目录下sudo chmod -R root:subversin /home/svn/src设置权限。

3.出现错误:"svnserve.conf:102:Option expected"
。。。。原因一般是,subversion无法识别配置文件中的前置空格。





题外话:

让subversion支持中文目录
1.对目录结构进行相应的修改。
2.修改代码库的配置文件???
??? svn对于非英文文件名和目录名使用utf-8格式编码处理,要对中文目录进行正确控制,应该使用无BOM的utf-8格式,如何将默认的文件转为utf-8,我使用的是UltraEdit的菜单"ASCII to UTF-8 (Unicode Editing)"。在UltraEdit的配置中,可以设置有无BOM。