当前位置: 代码迷 >> CVS/SVN >> Windows上SVN服务器的搭建
  详细解决方案

Windows上SVN服务器的搭建

热度:9519   发布时间:2013-02-26 00:00:00.0
Windows下SVN服务器的搭建

1,软件下载

下载Subversion服务器程序。

到官方网站的下载二进制安装文件,来到二进制包下载部分,找到 Windows NT, 2000, XP and 2003部分,然后选择" this directory ",这样我们可以看到许多下载的内容,目前可以下载 svn-1.4.0-setup.exe 。
下载Subversion的Windows客户端TortoiseSVN。

TortoiseSVN是扩展Windows Shell的一套工具,可以看作Windows资源管理器的插件,安装之后Windows就可以识别Subversion的工作目录。
官方网站是TortoiseSVN ,下载方式和前面的svn服务器类似,在Download页面的我们可以选择下载的版本,目前的最高稳定版本的安装文件为TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi。

2,服务器和客户端安装

服务器安装,直接运行svn-1.4.0-setup.exe ,根据提示安装即可,这样我们就有了一套服务器可以运行的环境。

安装TortoiseSVN,同样直接运行TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi按照提示安装即可,不过最后完成后会提示是否重启,其实重启只是使svn工作拷贝在windows中的特殊样式生效,与所有的实际功能无关,这里为了立刻看到好的效果,还是重新启动机器。

3,建立版本库(Repository)

运行Subversion服务器需要首先要建立一个版本库(Repository),可以看作服务器上存放数据的数据库,在安装了Subversion服务器之后,可以直接运行,如:

svnadmin create E:\svndemo\repository

就会在目录E:\svndemo\repository下创建一个版本库。

我们也可以使用TortoiseSVN图形化的完成这一步:
在目录E:\svndemo\repository下"右键->TortoiseSVN->Create Repository here...“, 然后可以选择版本库模式, 这里使用默认即可, 然后就创建了一系列目录和文件。

4,配置用户和权限

来到E:\svndemo\repository\conf目录,修改svnserve.conf:
# [general]
# password-db = passwd
改为:
[general]
password-db = passwd 然后修改同目录的passwd文件,去掉下面三行的注释:
# [users]
# harry = harryssecret
# sally = sallyssecret
最后变成:
[users]
harry = harryssecret
sally = sallyssecret

5,运行独立服务器

在任意目录下运行:
svnserve -d -r E:\svndemo\repository 我们的服务器程序就已经启动了。注意不要关闭命令行窗口,关闭窗口也会把svnserve停止。

在windows服务里运行:sc create svnservice? binPath= "D:\Program Files\Subversion\bin\svnserve.exe --service -r E:\SVN" DisplayName= "SvnService" depend= Tcpip start= auto

6,初始化导入

来到我们想要导入的项目根目录,在这个例子里是E:\svndemo\initproject,目录下有一个readme.txt文件:

右键->TortoiseSVN->Import...
URL of repository输入“svn://localhost/”
ok
完成之后目录没有任何变化,如果没有报错,数据就已经全部导入到了我们刚才定义的版本库中。

需要注意的是,这一步操作可以完全在另一台安装了TortoiseSVN的主机上进行。例如运行svnserve的主机的IP是133.96.121.22,则URL部分输入的内容就是“svn://133.96.121.22/”。

1 楼 doloveme 2011-05-24  
如果出现:
sc create [service name] [binPath= ] <option1> <option2>...CREATE OPTIONS:NOTE: The option name includes the equal sign. type= <own|share|interact|kernel|filesys|rec>       (default = own) start= <boot|system|auto|demand|disabled>       (default = demand) error= <normal|severe|critical|ignore>       (default = normal) binPath= <BinaryPathName> group= <LoadOrderGroup> tag= <yes|no> depend= <Dependencies(separated by / (forward slash))> obj= <AccountName|ObjectName>       (default = LocalSystem) DisplayName= <display name> password= <password>

错误那么注意:

binpath=、dispalyname=、depend=后面是必须要有一个空格


sc create svnserve binpath= "d:\PortableApps\svn\svnserve.exe --service -r e:\svn" displayname= "Subversion" depend= tcpip start= auto
2 楼 doloveme 2011-05-24  
首先介绍一下SubVersion,SubVersion是一种开放源代码的全新版本控制系统,支持本地访问或者通过网络访问的数据库和文件系统存储库。不但提供了常见的比较、修补、标记、提交、回复和分支功能,还增加了追踪移动和删除的能力。基本与CVS类似。

下面开始实战过程:

SubVersion与CVS一样,也是很典型的C/S系统,所以使用前需要安装相应的服务器和客户端软件。

下载地址:http://subversion.tigris.org/ ,进入该页面后点击左边的Downloads链接,

下载:Win32 packages built against Apache 2.0 (建议最好下载该版本,为了后面配置的兼容性),选择svn-1.4.4-setup.exe,该文件是SubVersion的安装版本,当然你也可以选择解压缩版本,解压缩版本不需要安装。

下载完毕后双击该文件进行安装,该安装过程与一般的软件安装没有任何区别,选择默认即可,一路Next,最后Finish。这样我们的SubVersion服务器端软件就安装完毕了。

我们到SVN的安装目录下去看看,这里以我的安装目录为例在D:\Program Files\Subversion下面,有一个bin目录,SVN的所有可执命令都在该目录下。这里面有很多exe文件,注意:SVN的命令是给予命令行的,所以我们不能直接双击这些命令来执行他们,我们需要到命令窗口去执行他们。

SVN的服务器端如见同样包含了客户端执行的一些命令,我们可以用这些命令来晚场我们日常的版本控制管理工作。

首先我们要在服务器端建立仓库(repository)。

在安装完毕SVN后,他会将安装目录中的bin目录加入到系统path中,可以通过右点我的电脑,选择高级->环境变量,查看path环境变量的值。

因此打开命令行窗口(win+r,键入cmd),输入svn命令,系统会返回『使用“svn help”得到用法。』说明系统已经认出svn命令了。

现在我们需要创建一个仓库(repository),假设仓库创建的位置为:E:\svn\repository目录下,那么我们需要在硬盘上创建该目录。创建完后,在命令行输入:svnadmin create E:\svn\repository

在执行完命令后,SVN没有给出任何信息,这说明我们的版本库已经创建成功了,我们这时再到E:\svn\repository下去看看,可以看到SVN已经再该目录下生成了很多文件夹和文件,这些文件就是SVN进行版本管理时所需要的,我们再日常的开发中是不会直接接触到这些文件的。

现在服务器端的仓库已经创建成功了,接下来就是在客户端创建一个项目,然后将该项目import到服务器端,将其纳入SVN的管理之下。不过在创建项目之前我们首先需要启动服务器,服务器启动后才会进行网络侦听,检查到客户端的相关命令请求。

在命令行中输入如下命令:svnserve -d -r E:\svn\repository,该命令含义让SVN将此目录作为仓库,并侦听客户端的请求。其中-d的作用为后台模式,而-r的作用是为制定服务器的仓库路径。

当服务器启动后,请不要关闭命令行窗口,否则会吧svnserve的服务停下来的,接下来的操作我们可以另外打开一个命令行窗口进行。

假设我们的客户端创建的项目在E:\test\client,我们在该目录下创建一个文件夹child和一个文件test.txt,并在该文件中增加些文本。

我们首先将命令行的当前目录转到E:\test目录下,在命令行中输入如下命令:svn import svn://localhost,其中svn://localhost表示的是SVN服务器的ip地址,这里就表示是我们本机地址。另外SVN实现了自己独有的协议SVN协议,所以我们可以看到url形式是svn://这样的,这个命令的作用就是当前目录以及其所有子目录和文件imort到服务器上去,纳入SVN的管辖范围中。

执行完毕后我们发现该命令失败了

----------------------------------------------------

E:\test> svn import://localhost

svn:无法使用外部编辑器获得日志信息;考虑设置环境变量$SVN_EDITOR,或者使用--message(-m)或--file(-F)选项

svn:没有设置SVN_EDITOR,VISUAL或EDITOR环境变量,运行时的设定中也没有“editor-cmd”选项

E:\test>

----------------------------------------------------

通过命令行的说明我们看到,该命令要求我们指定好一个记录日志的文件或者在系统环境变量中增加一个SVN_EDITOR的变量。二者选一就可以了,那么我们可以增加一个SVN_EDITOR的环境变量。该变量的值我们就取为系统自带的记事本就可以了。方法同前面说的path环境变量一样。在系统的环境变量中新建SVN_EDITOR,将它的值设为notepad即可

SVN_EDITOR=notepad

注意,设置完环境变量后,要关闭原来的命令窗口,重新cmd开一个命令行窗口,从而使得刚设的环境变量生效。

同样的cd到E:\test,以此为当前目录,然后输入命令:svn import svn://localhost

当我们输入命令回车后,出现一个记事本的信息窗口,这证明了我们的环境变量的增加是正确的,关闭该记事本窗口。命令行如下:

----------------------------------------------------

E:\test> svn import svn://localhost

日志信息未修改,或未指定

a)终止,c)继续,e)编辑

----------------------------------------------------

我们选择c,继续

----------------------------------------------------

E:\test> svn import svn://localhost

日志信息未修改,或未指定

a)终止,c)继续,e)编辑

c

svn:认证失败

E:\test>

----------------------------------------------------

[color=red]出现认证失败的信息,说明我们已经连接到SVN的服务器,不过服务器认为我们的客户端没有相应的权限,所以这时我们改变一下SVN的认证权限。

回到SVN仓库,即E:\svn\repository目录,我们发现这里面有一个conf目录,进入该文件夹,用文本编辑器打开svnserve.conf文件


我们看到这里是关于访问SVN仓库的一些认证设定,找到第12行:anon-access=read,这表示匿名用户的访问权限是读,并且大家注意到,该行的前面有个“#”。这表示改行是被注释掉的,这与Java的properties文件的注释方式是一致的,这也就说明了此时SVN服务器是不允许匿名登陆的,那么我们现在可以去掉“#”,不过现在客户端也只是匿名读,我们的import操作是写操作,所以我们在该行下面增加一行anon-access=write,如下面所示:

----------------------------------------------------

........

[general]

###These options control access to the repository for unauthenticated

###and authenticated users. Valid values are "write","read",

###and "none". The sample settings below are the defaults.

anon-access = read

anon-access = write

# auth-access = write

........[/color]

----------------------------------------------------

保存,关闭该文件。

这时我们需要停止当前的svnserve的服务,然后重新启动,让它接受我们的改变,转到它的命令窗口,用ctrl+c停止它,再重新启动。

svnserve -d -r E:\svn\repository

现在回到之前的命令行窗口,重新执行import命令,操作步骤如前面一样,过程如下

----------------------------------------------------

E:\test> svn import svn://localhost

日志信息未修改,或未指定

a)终止,c)继续,e)编辑

c

增加       client

增加       。。。。

提交后的版本未1。

E:\test>

----------------------------------------------------

ok!我们的import操作终于成功了。(未完待续。。。)
3 楼 doloveme 2011-05-24  
如果你碰到svn: No access allowed to this repository, 那就是你的svn配置有些问题, 检查你的SVN_REPOSITORY/conf/svnserve.conf 里的password-db = passwd打开
4 楼 doloveme 2011-05-24  
在客户端访问subversion版本库时出现这个错误:

svnserve.conf:12: Option expected

anon-access = read
   auth-access = write

像上面的配置文件中,anon-access是顶行的,没问题,而auth-access就存在前置空格,会导致这个错误。
  相关解决方案