Apache 2.2.X + SVN for windows

来源:互联网 发布:php error log 换行 编辑:程序博客网 时间:2024/04/28 19:43

1 下载并解压apachesubversion for windows “svn-win32-1.6.5.zip” (我用的是v1.6.5)解压的目录下readme.txt最后部分有最update的安装svn的步骤

 

其实svn完全不需要apache也可以使用。下面我们先讲解下如何单独使用svn

 

1Add %svn_home%/bin to the SYSTEM PATH andreboot DOS窗口 (这使得在任何路径下都可以调用svn/bin里的命令,同时也可以使得all SVN DLLs are visibleto the Apache service)

 

2DOS窗口执行命令

            svnadmin.execreate D:/svn_repositories/project1

            它在svn_repositories目录下创建了一个svn库“proejct1”,你可以看到project1目录里生成了一系列的文件,说明创建成功。

    svn_repositories还可以通过TortoiseSVN tool来创建

 

3) 启动project1svn

            svnserve.exe -d -rD:/svn_repositories/project1

            该命令将启动project1svn服务

 

4)测试下步骤3 svn服务是否已经启动:新开一个DOS窗口,执行:

svn infosvn://127.0.0.1

若输入结果类似下列信息,表示启动成功

路径: 127.0.0.1

URL: svn://127.0.0.1

版本库根:svn://127.0.0.1

版本库 UUID:f0275f17-92f9-6042-b7eb-1e4b931ad31b

版本: 0

节点种类: 目录

最后修改的版本: 0

最后修改的时间:2010-06-08 00:15:55

5)执行下列命令来尝试往svnupload一个test.txt file。(假设d盘下有一个test.txt file

svnimport d:/test.txt svn://127.0.0.1/test.txt -m "ADD: test file"

            输出结果是svn:认证失败

            说明SVN的权限不对。修改project1/conf目录下的3个文件

svnserve.conf file:

去掉下列4行的#

#anon-access= read

#auth-access= write

#password-db= passwd

#authz-db= authz

注意:去掉#的同时,必须把这4行的所有前置空格也去掉,否则upload时就会出现错误:svnserve.conf:12: Option expected

 

passwd file:

[users]下添加:

superman= 123

 

authz file:

在文件最后添加

[/]

* = r

superman= rw

 

            这样我们就创建了一个具有读写权限的superman (pwdis 123)的帐号。

 

            然后在步骤3)dos窗口里通过Ctrl+ C来停止svn服务,然后再执行一次步骤3)的命令来重启svn服务,这样才能令上面的修改生效。重启svn服务之后再执行一次命令:

svnimport d:/test.txt svn://127.0.0.1/test.txt -m "ADD: test file"

            然后按提示输入用户名和密码,就会看到成功upload testfile to svn project repository。输出结果为

增加  test.txt

提交后的版本为 1

 

Checksvn log command:

svn log svn://127.0.0.1/test.txt

 

svn不依赖apache. 配置apapche,主要时为了在线浏览代码.

 

Subversion(SVN)作为一个单独的版本管理软件是不具备网页浏览功能的。就是说,你可以用版本管理的客户端比如:TotoriseSVN来和SVN服务器进行连接。这样如果你的电脑没有安装SVN客户端就不能使用SVN服务器提供的服务了。为了实现请客户端的目标,就想通过网页来进行访问浏览。所以就将网页浏览的功能通过Apache服务器来实现。而通过Apache的插件来和SVN进行连接后,用户可以通过浏览器访问SVN服务器。

现在有不少的SVN服务器软件直接提供网页功能,而且支持图形界面。我个人使用的是VisualSVN,感觉不错,很容易管理,图形化的界面。你可以尝试下,至于SVN客户端你可以用TotoriseSVN

 

NetBeans,Eclipse等开发IDE都内置了SVN插件,很容易用的。

 

下面的步骤是采用apache来控制svn的访问。首先必须先stop之前启动的svnserve.exe服务,因为我们通过apache来访问subversion,而不再通过svnserve来访问

 

2 安装Apache2.2(both non-ssl and ssl are ok)

 

3 Copy %svn_home%/bin/mod_dav_svn.soand %svn_home%/bin/mod_authz_svn.soto the %Apache%/modules directory

 

4 打开apacheconf/httpd.conf,作下列修改

 1)去掉下列2行的注释

      #LoadModule dav_fs_modulemodules/mod_dav_fs.so

      #LoadModuledav_module modules/mod_dav.so

 2add following 2 lines to the end of the LoadModulesection

      LoadModuledav_svn_module modules/mod_dav_svn.so

      LoadModuleauthz_svn_module modules/mod_authz_svn.so

 

5 restart apache, 你可以在Apacheconsolestatus bar里出现svn的信息,如:Apache/2.2.15(Win32)SVN/1.6.5DAV/2,这说明已经成功将svn集成到apache

 

6 conf/httpd.confsvn设置虚拟目录svn分为多库和单库,由于我需要为多个project提供svn,所以使用多库,下列的虚拟目录设置是针对多库的。(单库和多库的区别见后面

<Location /svn>

   DAV svn  

   SVNListParentPath on

   SVNParentPath D:/SVN

   AuthType Basic

   AuthName "Subversion repositories"

   AuthUserFile D:/Apache/bin/passwd

   AuthzSVNAccessFile D:/Apache/bin/svnaccessfile

   Require valid-user

            #SSLRequireSSL

</Location>

上面的设置表示:你设置Apache的虚拟目录"svn",可以通过http://localhost/svn来访问在svn根目录D:/SVN下的所有svn库。 SVNParentPath是设置多个svn库的根目录。注意:根目录下的所有snv库都必须通过步骤1 > 2) svnadmin.exe create命令来创建

 

注意:如果使用了AuthzSVNAccessFile设置,就无法在浏览器里显示根目录下的svnrepository list,即当你尝试访问http://localhost/svn时,就会出现下列错误:

Youdon't have permission to access /svn/ on this server

但如果你尝试访问具体某个svn库(例如http://localhost/svn/shorturl)则不会出错。

 

若你没有使用AuthzSVNAccessFile设置,访问http://localhost/svn时不会出错,它会显示svn repository list

 

对上述设置逐一解释:

<Location /svn> 表示通过URL(http://MyServer/svn)来访问svn库,例如在svn根目录下有一个库叫”shorturl”,那么可以通过http://MyServer/svn/shorturl访问

 

DAV svn 告诉Apache哪个模块负责服务像那样的URL--在这里就是Subversion模块(这个设置是固定的)

 

SVNListParentPath on svn 1.3及更高版本中,这个指示器使得Subversion列出由SVNParentPath指定的目录下所有的svn

 

SVNParentPath D:/SVN 设置svn的根目录,所有svn库都放在该目录下

 

AuthType Basic 启用基本的验证,比如用户名/密码对

 

AuthName "Subversion Repository" 当一个验证对话框弹出时,告诉用户这个验证是用来做什么的

 

AuthzSVNAccessFile D:/Apache/bin/svnaccessfile 非常重要,指定svn库的访问控制文件,该文件可以使得对svn库的访问控制更为细致,比如分group,哪些group可以访问哪些svn库,拥有什么权限等。SVNAccessFile文件后面会有讲解。

 

AuthUserFile d:/apache/bin/passwd 指定密码文件的path,该文件用来存储验证用户的用户名及密码。创建用户密码以及存储的文件后面会有讲解

 

Require valid-user 限定用户只有输入正确的用户名及密码后才能访问这个路径

 

SSLRequireSSL 禁用无SSLhttp访问方式,而只允许通过https访问

 

 

·        创建“AuthUserFile”设置所需的用户密码以及存储的文件

使用apache bin/htpasswd命令来创建。命令的格式为

htpasswd[-cmdpsD] passwordfile username

 

若第一次创建用户,我们必须使用参数“c”来同时创建用户密码文件

htpasswd -c passwd robert

上述命令创建的一个文件“passwd”,同时在文件里添加了一个user named “robert”,执行该命令时会要求输入密码。

 

注意:创建第二或之后的用户时,一定不能用参数“c”,否则之前的用户就会被删除。

 

如果想要删除某个用户,我们可以使用下列命令:

   htpasswd -D passwd robert

这样,robert就被从passwd中删除了。

 

·        创建“AuthzSVNAccessFile”设置所需的分组权限管理文件

用户密码文件只是用来控制是否给用户访问,但并没有权限控制,分组权限管理文件则起到分组权限控制的功能。

 

例如有时,我们希望能够将多个开发人员编为一组,使用组的方式来为项目设定权限。比如projectA项目只有属于groupA的成员才可以存取.

 

下面是一个典型的svnaccessfile例子

//define groups

[groups]

developers = user1,user2,user3,user4

docs = user5,user6,user7

team1=user1,user2,user7

 

#to allow everyone read access

#allow all developers completeaccess

[/]

* = r

@developers = rw

 

#give the doc people write accessto the docs folder

[/project/trunk/doc]

@docs = rw

 

#give team 1 people write accessto svn “project1” repository under svn root folder

[project1:/]

@team1 =rw

 

上面设置表示:

1.定义了3个groups “developers”, “docs” and “team1”

2.[/]表示对于整个svn下的目录,* = r 表示所有user都有只读权限,@developers= rw表示developers group具有读写权限。

3.docs group只对于[/project/trunk/doc]目录具有读写权限

4.[project1:/]表示svn根目录下的“project1” svn repository (isit correct??)

注意:对组设置权限需加@,用户不需要。

 

 

TortoiseSVN --- SVN Client Side Tool for windows

 

安装很简单:下载,运行然后重启电脑即可。

使用TortoiseSVN大多数都是通过right click来完成的。

详见

http://www.uml.org.cn/pzgl/200904246.asp

http://www.subversion.org.cn/tsvndoc/

 

用TortoiseSVN创建branch/tag/trunk

http://blog.miniasp.com/post/2010/01/Subversion-Branches-and-Merging-using-TortoiseSVN.aspx

http://www.seo-help.cn/blog/id/54

http://www.svn8.com/svnjs/20081216/1713.html

 

TortoiseSVN animiation guide:
http://www.jiayun.org/tutorials/tortoisesvn.htm

 

SVN 基本指令教學

http://plog.longwin.com.tw/my_note-programming/2007/07/10/svn_tutorial_2007

 

用TortoiseSVN来进行svn的最简单的流程操作:

1. 现在svn server为一个project创建一个repository

2. 如果还没有往svn repository放东东,那么就用TortoiseSVN的"import"来首次放入,version is 1

3. 这样所有的developer都可以在本地创建一个workspace目录,然后使用TortoiseSVN的"SVN Checkout",来从svn server repository下载最新版本的东东

4. 每次在本地修改代码之前,养成习惯先run TortoiseSVN的 "SVN update"来先获取最新版本的东东

5. 修改了代码之后,通过TortoiseSVN的"SVN Commit"来上传新版本

 

 

SVN 单库与多库的比较(来自网上)

 

单库

多库

描述

N项目放在一个版本库管理,任何一个项目有提交,整体版本号随之增长。

N个项目独立管理,他们分别由自己的用户权限设置文件,任何一个版本库的修改不会影响到任何其他版本库。

权限的配置

是对单库中每一个文件夹对每组人员进行权 限设置。单库中项目不断增加,客户端使用人员的数量也在不断增长,而配置权限的工作 又是手工来完成,难免会出现一些错误,那么安全性就受到了威胁。但出现错误毕竟只是一种假设,不能因为一种假设的后果就放弃他潜在的诸多便利。

每一个库都单独配置权限,由于是多库,必 然使用每个库的人员相对单一,配置每个库的权限的时候就只是在最顶层目录开放读写权限。

备份

不管是完全备份还是增量备份,单库之需要 执行一次就完成了所有项目的备份,每次只生成一个备份文件。我所提倡的是完全备份,每次完全备份后,把上次的备份文件删除即可。

定期要对n个版本库进行备份,版本库数量太大,每次要生成n个版本库,未免显得凌乱。如果采用完全备份,那 么每次备份后都要逐一把每个版本库上一次所生成的备份文件删掉,很麻烦。如果采用增量备份,在几个月后每个版本库都有好多个备份文件,更凌乱。

用户登录问题

 

需要访问多个版本库的用户不存在跳转于几个版本库间重复身份 验证的问题。

版本号

A项目的版本号随着其它项目提交的修改而增长,我认为这对于A项目的程序员不会造成任何的不便。因为他在察看日志或者版本库浏览器的时候只能看到属于自己项目的目录和文件,和提 交日志。只要提交修改的时候日志信息足够细致就不会对日后查找某次变更造成困难。

每个版本库互不相扰。

恢复修改

假设现在版本号为100,程序员认为NO.50处的修改有误,想要撤销,他撤销自己曾经 修改过的,并不会把NO.51~NO.100的修改也撤销掉,所以他的撤销不影响其他项目工作。

 

 

下面的部分可能与上面的表格的讲解有冲突。

 

多库

一般都是指在一个根目录下创建多个子目录,每个子目录作为一个库,但这些库又共用根目录(也可以是其它目录)下的配置文件
优点:不需要修改 apche 的配置文件,也不需要重新启动 apache,每次要添加新的库的时候只要在根目录下创建一个新的子目录,然后修改根目录下的配置文件就可以了,并且各个库的版本号是独立的
缺点:如果不是 apache 的服务器,可能看不到根目录,也就是说不能浏览到所有的库列表,另外就是备份、配置起来要复杂些。

单库

一个根目录就是一个库,下面的子目录对应不同的项目,只有一个配置文件,所以对项目的控制也就是对子目录的控制。
优点:不需要修改 apche 的配置文件,也不需要重新启动 apache,每次要添加新的库的时候只要在根目录下创建一个新的子目录,然后修改根目录下的配置文件就可以了,并且备份起来方便。
缺点:版本号更新不是独立的,所有的项目共用一个版本号,只要有一个项目更新,版本号就会更新,不利于单独项目的版本控制和操作。

多个单库

则是每个目录是一个库,对应一个项目,包括一个配置文件。
优点:把目录、配置、版本号与项目统一起来
缺点:添加库的时候需要修改 apache 的配置文件

 

 

原创粉丝点击