终极SVN在windows下的配置(一)

1 前言
这段时间有点空,闲着也无聊,所以就弄弄这个 SVN。在做服务之前,我还是重申我的观点:
一.          要知道系统的操作,由于本服务的运行平台是WINDOWS,所以简单一点。但是对于LIUNX 来说,这一点很重要。
二.          要了解所做的应用服务是用来干什么的,以及有些步骤为什么要这么做,不这样行不行,或者有更好的发法。多问一些为什么。
三.          最后一点是,做技术,尽量的要自己动手去做,光靠嘴说会做,是不行的。并且在做的时候,出现的问题越多,对你是有好处的。
 
2 关于 Subversion
Subversion 是一个版本控制系统,它是根据 CVSConcurrent Versions System)的功能为基础来设计,但是改进了一些 CVS 的缺点,例如:在 CVS 中移动文件目录很不方便;此外,它也增加了其他的功能,例如:不可分割的送交(如同资料库交易的概念,送交多个文件时,若有任何一个文件失败,则这次送交的所有文件都不会进入文件库中),支援多种网络协议,一致的文件差异比对(不管什么文件类型,均使用二进位差异比对方式),等等。
在做这个服务的时候,我也查了网上的一些资料,不是很完整的。而且在LIUNX环境下的比较多,所以我做这个服务也用的时间有点长,希望此文可以给初学者一些帮助。
 
 
 
3 服务所需软件:
 
系统平台: windows server 2003 企业版
Apachehttp://httpd.apache.org/download.cgi  (Apache_2.0.63-win32-x86-no_ssl.msi
Setup-Subversion-1.5.1.en-us.msi
 
 
4 安装 Apache server:
 
警告:请注意,没安装 Service Pack 1Windows XP将导致错误的网络数据从而破坏你的版本库!
 
http://httpd.apache.org/download.cgi 最新版本的 Apache Web服务器。确保你下载的版本大于 2.0.542.0.54版本的 Apache将不能与 Subversion 1.3.xx配合工作。而且,小
2.0.54Apache也因为在 windows上的编译存在一个 bug而导致不能与 subversion1.2配合使用。
 
一旦你已经有了 Apache2的安装程序,你可以双击它,它将引导你完成整个安装过程。请确保你输入正确的服务器 URL(如果你的服务器没有 DNS名称,你可以直接输入 IP地址)。我
建议你将 Apache安装成 for all Users,on Port 80,as a service。注意:如果你已经有一个 IIS或者其它的程序使用 80端口,安装可能会失败。如果是这样,你可以到程序目录下
Apache Group/Apache2/conf目录中找到文件 httpd.conf,将其中的 Listen 80改成一个不用的端口,比如 Listen 81。然后重新运行这个安装程序,这次应该不会再有问题了。
 
现在你可以在你的浏览器中键入 http://loccalhost,如果呈现了一个已经配置好的网站,那么你的 Apache就安装成功了。
 
警告:
 
如果你将 Apache安装成一个服务,它将以本地 system帐户来运行。为 Apache创建一个单独的用户来运行它将会更安全一些。
 
请确保运行 Apache的用户有版本库的完全访问权限(右键版本库目录 ->属性 ->安全)。要不然,用户将无法提交他们的更改。
 
就算 Apache以本机 system来运行,你也要设置它能完全读写版本库目录。
 
如果没有为 Apache配置这个许可,用户将会得到 "禁止访问 "的错误信息,在 Apache的错误日志中表现为错误 500
 
 
 
 
 
OK ! apache 安装完成!
 
 
5.安装 Subversion
 
一.        直接运行安装因为apache20 的,所以为第一项!
二.     E:/Program Files/Subversion/bin目录下的 mod_dav_svn.so 和 mod_authz_svn.so 复制到E:/Program Files/Apache Group/Apache2/modules目录下。
三.     E:/Program Files/Subversion/bin 目录下的 libdb44.dll、libeay32.dll、以及 ssleay32.dll 复制到E:/Program Files/Apache Group/Apache2/ 底下的 bin 中。
用文本编辑器打开 Apache Server E:/Program Files/Apache Group/Apache2/conf/httpd.conf,寻找一堆LoadModule 指令,先找到以下两行:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
把这两行最前面的 '#' 字元刪除,然后把下面这行加到这群 LoadModule 指令的后面:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
 
四.     重新启动 Apache  Server
 
5.1  设定 Subversion 文件库路径
现在要设定 URL 路径与文件库实际路径的对应关系。对应的方式有两种,分别是 SVNPath 与SVNParentPath。
5.1.1 SVNPath
SVNPath 适合用来个别指定文件库的路径,语法是:
<Location /svn/repos_name>
DAV svn
SVNPath /absolute/path/to/repository
</Location>
其中 "/svn/repos_name" 就是用户端存取特定文件库的 URI(Uniform Resource Indentifier),SVNPath 后面指定的路径则是文件库的绝对路径,假设我们的文件库实际存放的路径是d:/svn/MyRepository,并且希望用户端使用 "http://myserver/svn/myrepos" 的 URL 来存取文件库,那么要加入 httpd.conf 的內容就是:
<Location /svn/myrepos>
DAV svn
SVNPath d:/svn/MyRepository
</Location>
注意 Location 标签后面的 /svn/myrepos 的第一个斜线不可少!
5.1.2 SVNParentPath
如果你的文件库都集中放在某个目录之下,例如:d:/svn,那你就可以使用 SVNParentPath 的方式指定文件库的根路径,语法是:
<Location /svn>
DAV svn
SVNParentPath /absolute/path/to/repository
</Location>
其中的 SVNParentPath 后面指定的路径是文件库的绝对路径,假设我们的文件库实际存放的路径是 E:/svn,那么要加入 httpd.conf 的内容就是:
<Location /svn>
DAV svn
SVNParentPath E:/svn
</Location>
这表示可以让任何人都可以透过 http://myserver/svn/<文件库名称> 的方式,存取位于 E:/svn 这个目录以下的所有文件库。也就是说,这个设定动作只需要一次,如果使用 SVNPath,那么你必须为各个文件库分别指定对应的路径。
为方便起见,我们这里用 SVNParentPath 来统一指定所有文件库的父层 URL 路径。将上述的设定加到 Apache HTTP Server 的 httpd.conf 文件尾部就行了。
接下来就可以在 E:/svn 底下建立文件库了。
6 建立文件库
假设我们要把所有的文件库都放在 E:/svn 目录下,现在要建立一个测试用的文件库,名称叫做 repository,指令为:
md E:\svn
svnadmin create E:/svn/repository ( 要进入到此目录才用svnadmin这个命令E:\Program Files\Subversion\bin)命令执行完后,检查看看 E:/svn/repository 目录底下产生了哪些目录和文件。
 
警告:
文件库绝对不可以在建立在任何远端的储存媒体上,例如:网络硬盘
 
这时候你已经建立了一个文件库,你可以先在本机用浏览器测试一下,网址输入 http://127.0.0.1/svn/repository或http://localhost/svn/repository,看看能不能看到文件库的内容,正常的话应该像下图一样。
如:
 
7  引入项目测试
假设我们现在有一个测试项目,项目目录位于 E:/svn_temp/projectA,底下有下列子目录(当然也可以拷贝些文件到这些子目录中):
trunk
branches
tags
 
 
则进入E:/svn_temp/projectA目录后执行以下指令就可以将测试项目projectA到文件库 E/svn/repository中。
svn import . http://localhost/svn/repository/projectA -m "Initial repository layout"
         :
 
提示
本文在执行 svn 命令时,都是使用 http 协议的方式,这样我们可以确知 Subversion 与Apache HTTP Server 的设定无誤,其他人就可以透过 Internet 存取文件库。当然你也可以用其他的协议,例如:file:///,如果使用 file 协议,则该指令要变成:
svn import . file:///d:/svn/repository/projectA -m "Initial repository layout"
这时候projectA 这个项目已经引入文件库了(此时你会发现在E:\svn\repository\db\revs\0目录下多了一个叫1的文件),也就是说,其他使用者可以开始存取这个文件库的项目取出文件和程序码了。
 
7.1文件库与项目的配置方式
如果我们要在 repository文件库中引入多个项目,比如再将 E:/svn_temp/projectB项目放到 repository目录下,则进入 projectB目录,用下面的命令引入 projectB
svn import . http://localhost/svn/repository/projectB -m "Initial repository layout"
 
引入 projectB后, repository文件库的目录结构就会变成这样:
 
也就是说 repository 这个文件库里面包含了两个项目。
如果你希望为每个项目建立一个文件库,那么建立文件库的指令就变成:
md d:\svn
svnadmin create d:/svn/projectA
svnadmin create d:/svn/projectB
这样就变成有两个文件库了,文件库名称分别是 ProjectA ProjectB
 
7.2项目的目录结构说明
这里补充说明一下 ProjectA 的目录结构。在 ProjectA 项目的根目录下建立的 trunk、branches、和 tags 这三个目录是有特别意义的,它们的作用分别是:
trunk 目录用来存放目前项目正在进行开发的程序文件和文档(又称为主线,即 mainline);
branches 用来存放主线的各个仍在发展中的分支;
tags 则用来存放已经不再变动的分支,也就是其中的文件不会再修改了。
这是 Subverion 官方手册建议的目录结构安排方式,你可以自己决定要不要用这种配置方式,详细说明请参考官方手册的第五章,子标题为 "Choosing a Repository Layout"
8  访问控制
8.1 基本 (Basic)访问控制
照着前面的步骤做,你会发现存取文件库时都不用输入帐号密码,这是因为我们之前的设定没有启用身分验证的功能。但是我们通常不希望所有人都能任意存取你的文件库,免得重要资料外泄,或者资料被破坏,因此了解如何加入身分验证也是必要的。
Sebversion 提供了多种验证使用者身份的方式,现在介绍Basic访问控制,按下列步骤进行:
 
一.     修改 httpd.conf 的 <Location> ,设定如下:(可以将下面的复制到以前5.1.2做的那段)
二.    <Location /svn>
DAV svn
SVNParentPath E:/svn
AuthName "请输入用户名和密码"
AuthzSVNAccessFile "E:/svn/accessfile.txt"
Require valid-user
# The following is Basic authentication setting
AuthType Basic
AuthUserFile "E:/svn/passwd.txt"
</Location>
 
.说明:
<Location /svn>:意味着可以通过像这样的URL(http://MyServer/svn)来访问Subversion版本库.
 
DAV svn:告诉Apache哪个模块负责服务像那样的URL--在这里就是Subversion模块.
 
SVNParentPath E:\SVN:告诉Subversion在目录 E:\SVN下寻找版本库
 
AuthName "Subversion repositories":当一个验证对话框弹出时,告诉用户这个验证是用来做什么的.
 
 
AuthUserFile E:\passwd.txt:指定E:\passwd.txt用为密码文件用来验证用户的用户名及密码.
 
AuthType Basic:启用基本的验证,比如用户名/密码对不.
 
AuthzSVNAccessFile E:\svnaccessfile.txt:指定E:\svnaccessfile.txt来限定各个用户或组在版本库中目录的访问权限.
 
Require valid-user:限定用户只有输入正确的用户名及密码后才能访问这个路径.
 
 
如果你想用不同的访问政策文件和密码文件控制不同的文件库,那么可以在httpd.conf中写多个<Location></Location>模块,并用SVNPath指定各文件库的绝对路径
 
四.用Apachehtpasswd指令生成用户名和密码:
 
htpasswd -cm E:/svn/passwd.txt user1
htpasswd -m E:/svn/passwd.txt user2
htpasswd的参数 -c是创建文件的意思,故只在首次使用,仅使用 -m参数时也可用来修改密码。
 
进入: E:\Program Files\Apache Group\Apache2\bin
 
 
五:配置文件库访问政策文件
 
在E:\svn建立一个accessfile.txt
 
内容如下:
 
[repository:/]       (文件库 repository中所有的文件)
user1 = rw            (用户 user1为读写权限)
[repository:/projectA] (文件库 repositoryprojectA 项目文件)
user2 = r
 
 [repository:/projectB]
* = r
 
小节名称中冒号前面的文件库名称不要轻易省略,省略就代表是针对所有文件库,这样是很为危险的,*号代表所有用户,等于号后面为空表示没有权限,mod_authz_svn模块首先会找到匹配自己的目录,然后是父目录,父目录的父目录,依次下去,并会以最近找到的描述为准。另外,你还可以定义一组用户,然后按组进行权限配置,比如:
[groups]
department_1 = user1, user2
department_2 = user3, user4
[repository:/projectA]
@department_1 = r
@department_2 = rw
 
权限说明:
  #[groups]   //群组设置
 
#group1 = harry   // 群组1中的成员
 
#@group1 = rw // 表示这是个群组权限设置
 
#[/]          //所有仓库的根目录
 
 
#* = r         //所以成员为只读
 
# 明确定义的权限大于继承权限,没有明确定义的权限将从上层继承下来,因此赋权应在仓库内用户必须要的目录中指定.
 
 
六. 重新启动 Apache(注意,对httpd.conf的修改必须重启Apache后才会生效),开启浏览器,输入网址http://127.0.0.1/svn/repository 看看,你预期应该会看到如下的验证画面:
 
六.如果要让用户能远程修改自己的Subversion密码,也很简单,有人已经把你做了相关工作了,可访问http://bbs.iusesvn.com/thread-20-1-1.html站点下载Apache20Passwd.rar,将其中的passwd.cgi及passwd.cgi.ini复制到<Apache_root>的cgi-bin子目录中,然后修改配置文件passwd.cgi.ini中的auth_user_file路径,使得其指向实际的AuthUserFile的全路径(比如d:/svn/passwd.txt”),这时用户就可以访问http://localhost/cgi-bin/passwd.cgi修改subversion密码了。
9 安装客户端 TortoiseSVN
现在你已经有一个可以运作的 Subversion 服务器,可以试着在其他电脑上存取文件库了。如果你习惯使用命令列工具,那就只要在客户端电脑上安装 Subversion 就行了,存取文件库都是透过命令列工具(主要是 svn.exe)。这里要介绍的是一个专门为 Windows 操作系统设计的 Subversion 客户端: TortoiseSVN(以下简称 TSVN)。
9.1 安装 TortoiseSVN
. 到 http://tortoisesvn.tigris.org/ 下载最新的安装程序,比如TortoiseSVN-1.4.0.7501-win32-svn-1.4.0.msi。安装完成后会要求你重新开机。
. 到 http://tortoisesvn.tigris.org/ 下载简体中文的语言包(language pack),请注意语言包的版本应该要跟你安装的 TSVN 版本相同,否则最好不要安装。语言包装完之后,用资源管理器在Windows 桌面上或任何一个文件夹点一下滑鼠右键,选择 TortoiseSVN -> Settings,在 "Main" 页夹中更改 Language 设定为「中文(简体)」,再按「确定」钮即可。
. 如果你是透过 proxy server 存取 Internet,请在 TSVN 的设定窗口中,切到「网络」页面,然后输入你的 proxy server 相关信息,否则你将无法存取位于 Internet 上的文件库。
安装完成之后,在任何目录名称上点一下滑鼠右键都可以看到 TSVN 的功能选项,这也是 TSVN 方便的地方,它不用跟开发工具整合,而是跟操作系统整合在一起,这样不管你用什么开发工具,都可以轻松的使用 TSVN 来存取文件库。如果你希望在TSVN中使用Beyond Compare工具比较文件,则在客户端安装Beyond Compare后,在任意目录点鼠标右键,进入Tortoise-->Settings-->External Programs-->Diff Viewer/Merge Tool/Unified Diff Viewer,在External Programs中指定BC2.exe的路径即可。
 
接下来你可以用 TSVN 练习一下存取之前建立好的文件库,试着把你现有的项目引入文件库中,并且在客户端使用 TSVN 执行取出、存入、更新等动作。
TSVN 虽然是客户端工具,不过它也提供了建立文件库、以及引入、引出等功能,因此安装在服务器端也挺方便的。
这里顺便提几个客户端提交修改点时的注意事项:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值