• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

我们将共同携手迎接你的到来!


新的一年
新的开始
新的目标
新的收获

kevin 愛戀 20140103

博客园          联系   管理     
Subvision 安装 部署 TortoiseSVN

由于 indian 写的Subvision安装教程实在是太好了,我就不浪费时间原创了,直接转载他的文章:

Subvision SVN
(svn的服务器端)安装教程:

一、准备工作
1、获取 Subversion
服务器程序
到官方网站(http://subversion.tigris.org/)下载最新的服务器安装程序。目前最新的是1.4.6版本,具体下载地址在:
,注意找for apache 2.2.x 版本的。

2、获取 TortoiseSVN 客户端程序
从官方网站
http://tortoisesvn.net/downloads 获取最新的TortoiseSVN 。TortoiseSVN 是一个客户端程序,用来与
subversion 服务器端通讯。Subversion 自带一个客户端程序 svn.exe ,但 TortoiseSVN
更好操作,提高效率。

二、安装服务器端和客户端
首先安装 Apache 2.2.6
,具体安装方法大家参考相关资料,或者参看我写的《Windows下安装Apache 2.2.x》。
其次安装
Subversion(以下简称SVN)的服务器端和客户端。下载下来的服务器端是个 zip压缩包,直接解压缩即可,比如我解压到 E:\subversion
。客户端安装文件是个 exe
可执行文件,直接运行按提示安装即可,客户端安装完成后提示重启。

三、建立版本库(Repository)
运行Subversion服务器需要首先要建立一个版本库(Repository)。版本库可以看作是服务器上集中存放和管理数据的地方。
开始建立版本库。首先建立
e:\svn 空文件夹作为所有版本库的根目录。然后,进入命令行并切换到subversion的bin目录。输入如下命令:

svnadmin
create E:\svn\repos1

此命令在 E:\svn 下建立一个版本库 repos1 。repos1
下面会自动生成一些文件夹和文件。

我们也可以使用 TortoiseSVN 图形化的完成这一步:
先建立空目录 E:\svn\repos1
,注意一定是要空的。然后在 repos1 文件夹上“右键->TortoiseSVN->Create Repository
here...”,然后可以选择版本库模式,这里使用默认的FSFS即可,然后就创建了一系列文件夹和文件,同命令行建立的一样。

四、运行独立服务器
此时
subversion 服务还没有开始,只是通过它的命令建立了版本库。继续在刚才的命令窗口输入:

svnserve.exe
–daemon

svnserve 将会在端口 3690 等待请求,--daemon(两个短横线)选项告诉 svnserve
以守护进程方式运行,这样在手动终止之前不会退出。注意不要关闭命令行窗口,关闭窗口会把 svnserve 停止。


为了验证svnserve正常工作,使用TortoiseSVN -> Repo-browser 来查看版本库。在弹出的 URL
对话框中输入:

svn://localhost/svn/repo1

点 OK 按钮后就可以看见 repo1
版本库的目录树结构了,只不过这时 repo1
是个空库。

你也可以使用--root选项设置根位置来限制服务器的访问目录,从而增加安全性和节约输入svnserve
URL的时间:

svnserve.exe --daemon --root
drive:\path\to\repository

以前面的测试作为例,svnserve将会运行为:

svnserve.exe
--daemon --root
e:\svn

然后TortoiseSVN中的版本库浏览器URL缩减为:

svn://localhost/repo1

五、配置用户和权限
用文本编辑器打开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

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

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


七、基本操作流程
1、取出(check
out)
取出版本库到一个工作拷贝:
来到任意空目录下,比如在f分区建立一个空文件夹 f:\work 。“右键 -> SVN
Checkout”。在“URL of
repository”中输入“svn://localhost/svn/repo1/guestbook”,这样我们就得到了一份 guestbook
中内容的工作拷贝。

2、存入(check in)/提交(commit)
在工作拷贝中作出修改并提交:
在 guestbook
工作拷贝中随便打开一个文件,作出修改,然后“右键 -> SVN Commit...
”。这样我们就把修改提交到了版本库,版本库根据情况存储我们提交的数据。

在修改过的文件上“右键 -> TortoiseSVN ->
Show Log” ,可以看到对这个文件所有的提交。在不同的 revision 条目上“右键 -> Compare with working
copy”,我们可以比较工作拷贝的文件和所选 revision 版本的区别。



安装 ApacheSVN 服务器教程:


Subversion的设计包括一个抽象的网络层,这意味着版本库可以通过各种服务器进程访问。理论上讲,Subversion可以使用无限数量的网络协议实现,目前实践中存在着两种服务器。
?
SVNServer:svnserve是一个小的(也叫轻型的)、独立服务器,使用自己定义的协议和客户端。(作者注:以下称这种服务器为“svnserver服务器”,上面的安装配置就是安装svnserver服务器。)
?
ApacheSVN:Apache是最流行的web服务器,通过使用mod_dav_svn模块,Apache可以访问版本库,并且可以使客户端使用HTTP的扩展协议WebDAV/DeltaV进行访问。(作者注:以下称这种服务器为“ApacheSVN服务器”)

通过
Http 协议访问版本库是 Subversion
的亮点之一。ApacheSVN服务器具备了许多svnserve服务器没有的特性,使用上更加灵活,但是有一点难于配置,灵活通常会带来复杂性。

由于
Subversion 需要版本化的控制,因此标准的 Http 协议不能满足需求。要让 Apache 与 Subversion 协同工作,需要使用
WebDAV(Web-based Distributed Authoring and Versioning:)Web 分布式创作和版本控制)。WebDAV 是
HTTP 1.1 的扩展,关于 WebDAV 的规范和工作原理,可以参考 IETF RFC 2518
(http://www.ietf.org/rfc/rfc2518.txt)。

一、必备条件
为了让你的版本库使用HTTP网络,你必需具备以下几个条件:

1、配置好httpd
2.2.x,并且使用mod_dav启动。
2、为mod_dav安装mod_dav_svn插件。
3、配置你的httpd.conf,使http协议能访问版本库。

下面以我的配置过程详细讲解。

环境:
OS:Windows
XP SP2
Web:Apache 2.2.6
SVN:svn-win32-1.4.6


二、安装
1、安装Apache
具体安装方法见:《Windows下安装Apache 2.2.x》

2、安装
Subversion
将下载下来的 svn-win32-1.4.6.zip 直接解压即可,比如我解压到 e:\subversion
。
从Subversion安装目录的 bin 子目录将
intl3_svn.dll、libdb44.dll、mod_authz_svn.so、mod_dav_svn.so 拷贝到Apache的模块目录(Apache
安装目录的 modules 文件夹)。

三、基本的Apache配置
修改Apache的配置文件 httpd.conf
,使用LoadModule来加载mod_dav_svn模块。

将
#LoadModule dav_module
modules/mod_dav.so

改成:
LoadModule dav_module
modules/mod_dav.so

即去掉前面的“#”号。

添加:
LoadModule dav_svn_module
modules/mod_dav_svn.so

一定确定它在 mod_dav
之后。

现在你已经设置了Apache和Subversion,但是Apache不知道如何处理Subversion客户端,例如TortoiseSVN。为了让Apache知道哪个目录是用来作为Subversion版本库,你需要使用编辑器(例如记事本)编辑Apache的配置文件。

在配置文件最后添加如下几行:

<Location
/ repository>
   DAV svn
   SVNPath
e:/svn/repos1
</Location>

这个配置告诉Apache首先需要启用 dav_module,然后加载
dav_svn_module 。版本库对外的URL是:http://服务器IP/repository
,所有的Subversion版本库在物理上位于e:/svn/repos1 。
配置完毕后重新启动 Apache,打开浏览器,输入
http://服务器IP/ repository 将会看到如下画面:



这表示 Apache 的 dav_svn
模块已经可以正常工作了。用户可以使用任何一种 Subversion 的客户端通过 Http
协议访问你的版本库。

如果想要指定多个版本库,可以用多个 Location 标签,也可以使用 SVNParentPath 代替
SVNPath,例如在 e:\svn 下有多个版本库 repos1,repos2 等等,用如下方式指定:

<Location
/repository>
DAV svn
SVNParentPath
e:/svn
</Location>

“SVNParentPath e:/svn ” 表示 e:\svn
下的每个子目录都是一个版本库。可以通过
http://服务器IP/repository/repos1,http://服务器IP/repository/repos2
来访问。

现在你的版本库任何人都可以访问,并且有完全的写操作权限。也就是说任何人都可以匿名读取,修改,提交,以及删除版本库中的内容(注:这时不需要配置E:\svn\repos\conf\svnserve.conf
文件,并且也不需要启动E:\subversion\bin\svnserve.exe。因为提交是通过Apache的dav模块处理的,而不是由svnservice处理。)。我们用
TortoiseSVN 客户端验证即知。
显然大部分场合这是不符合需求的。那么如何进行权限设置呢,Apache
提供了基本的权限设置:

四、认证选项
1、基本 HTTP 认证
最简单的客户端认证方式是通过 HTTP
基本认证机制,简单的使用用户名和密码来验证一个用户的身份。Apache提供了一个 htpasswd
工具来管理一个用户文件,这个文件包含用户名和加密后的密码,这些就是你希望赋予 Subversion 特别权限的用户。htpasswd 可以在 Apache 的
bin 安装目录下找到。具体使用方法如下:

创建用户文件:
htpasswd -c /etc/svn/passwordfile
username

添加新用户(-m 表示以MD5加密密码):
htpasswd [-m] /etc/svn/passwordfile
Newusername

更改用户密码:
htpasswd [-m] /etc/svn/passwordfile
username

删除用户(要用大写的 D ):
htpasswd –D /etc/svn/passwordfile
username


接下来修改 httpd.conf,在 Location 标签中加入如下内容:

AuthType
Basic
AuthName "svn repos"
AuthUserFile
E:/usr/Apache2.2/bin/passwd
Require valid-user

说明:
AuthType
Basic:启用基本的验证,比如用户名/密码对。
AuthName "svn
repos":当一个认证对话框弹出时,出现在认证对话框中的信息。(最好用英文,TortoiseSVN
不支持中文,安装语言包除外。)
AuthUserFile
E:/usr/Apache2.2/bin/passwd:指定E:\usr\Apache2.2\bin\passwd为用户文件,用来验证用户的用户名及密码。
Require
valid-user:限定用户只有输入正确的用户名及密码后才能访问这个路径

重新启动 Apache ,打开浏览器访问版本库。Apache
会提示你输入用户名和密码来认证登陆了,现在只有 passwd 文件中设定的用户才可以访问版本库。也可以配置只有特定用户可以访问,替换上述 "Require
valid-user" 为 "Require user tony robert" 将只有用户文件中的 tony 和 robert
可以访问该版本库。

有的时候也许不需要这样严格的访问控制,例如大多数开源项目允许匿名的读取操作,而只有认证用户才允许写操作。为了实现更为细致的权限认证,可以使用
Limit 和 LimitExcept 标签。例如:

<LimitExcept GET PROPFIND OPTIONS
REPORT>
   require
valid-user
</LimitExcept>

以上配置将使匿名用户有读取权限,而限制只有 passwd
中配置的用户可以使用写操作。
如果这还不能满足你的要求,你希望精确的控制版本库目录访问,可以使用 Apache 的 mod_authz_svn
模块对每个目录进行认证操作。

2、用 mod_authz_svn 进行目录访问控制
首先需要让 Apache 将 mod_authz_svn
模块加载进来。在 Subversion 的安装目录中找到 mod_auth_svn 模块,将其拷贝到 Apache 安装目录的 modules 子目录下。修改
httpd.conf 文件,添加:

LoadModule authz_svn_module
modules/mod_authz_svn.so

现在可以在 Location 标签中使用 authz 的功能了。一个基本的 authz
配置如下:

<Location /repository>
   DAV svn
   SVNParentPath
e:/svn
        
   # our access control policy
   AuthzSVNAccessFile
E:/usr/Apache2.2/bin/accesspolicy.conf
        
   # try anonymous access
first, resort to real
   # authentication if necessary.
   Satisfy
Any
   Require valid-user
        
   # how to authenticate a
user
   AuthType Basic
   AuthName "Subversion repository"
  
AuthUserFile E:/usr/Apache2.2/bin/passwd               

</Location>

AuthzSVNAccessFile 指向的是 authz
的策略文件,详细的权限控制可以在这个策略文件中指定。访问文件 accesspolicy.conf 的语法与svnserve.conf和 Apache
的配置文件非常相似,以(#)开头的行会被忽略;在它的简单形式里,每一小节命名一个版本库和一个里面的路径;认证用户名是在每个小节中的选项名;每个选项的值描述了用户访问版本库的级别:r(只读)或者rw(读写),如果用户没有提到或者值留空,访问是不允许的;
* 表示所有用户,用它控制匿名用户的访问权限;@符号区分组和用户。如:

[groups]
committers = paulex,
richard
developers = jimmy, michel, spark, sean

[/]
* = r

@committers = rw

[/branches/dev]
@developers = rw


[/tags]
tony = rw
[/private]
* =
@committers=
r

使用 SVNParentPath 代替 SVNPath 来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中
tony 将对所有版本库里的 /tags 目录具有读写权限。如果要对具体每个版本库配置,用如下的语法:

[groups]

project1_committers = paulex, richard
project2_committers = jimmy,
michel, spark, tony, Robert

[repos1:/]
* = r
@ project1_committer
= rw

[repos2:/]
* = r
@ project2_committer = rw

这样
repos1的 project1_committer 组只能对 repos1 版本库下的文件具有写权限而不能修改版本库 repos2 ,同样 repos2 的
project2_commiter 组也不能修改 repos1 版本库的文件。

posted on 2011-04-08 13:09  kevin_20131022  阅读(2857)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3