`

windows上安装apache2.0.59+Subversion-1.3.1(整理)

阅读更多

为了统一进行文档与程序的版本管理,更好的使团队进行协同工作。对版本管理软件定为Subversion(一款开源的项目管理工具)。<o:p></o:p>

以下关于apachesubversion相结合的服务器的安装与配置<o:p></o:p>

一.windows上安装apache<st1:chsdate isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12">2.0.59</st1:chsdate>+Subversion-1.3.1 <o:p></o:p>

OS: Windows XP SP2
1)
安装Apache Server
2)
安装SVN
3)
配置邮件通知

<!---->1.       <!---->安装apache_<st1:chsdate isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12">2.0.59</st1:chsdate>-win32-x86-no_ssl.msi
安装过程中设置以下参数:
Network Domain: svn.company.com
Server name: svn.company.com
Administrator's Emai Address: admin@company.com

安装到默认路径为D:\devtools\Apache2

<!---->2.       <!---->安装svn-<st1:chsdate isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12">1.3.1</st1:chsdate>-setup.exe,安装到默认路径为D:\devtools\Subversion默认安装后,在apache的配置文件httpd.conf中会自动加入以下两行。
LoadModule dav_svn_module "D:/devtools/Subversion/bin/mod_dav_svn.so"
LoadModule authz_svn_module " D:/devtools/Subversion/bin/mod_authz_svn.so"
把这行的注释去掉
LoadModule dav_fs_module modules/mod_dav_fs.so

拷贝D:\devtools\Subversion\bin下的libdb43.dll到这个目录下Apache2\modules
打开apache的配置文件httpd.conf在末尾处加入以下参数:
<location svn=""></location>

<location svn=""></location>

<location svn=""></location>

< L*ocat*ion /s*vn>

DAV svn

SVNListParentPath on

SVNParentPath E:\svn-repository

AuthType Basic

AuthName "Subversion repositories"

AuthUserFile E:/svn-repository/test/passwd

#AuthzSVNAccessFile svnaccessfile

Require valid-user

< /L*oc*at*ion **>


保存。(在这里权限文件我不多讲了,大家多做实验就明白了)

建立仓库
打开CMD命令行界面,"开始" -> "运行" -> "cmd" -> "回车"
C:\ > d:   //
进入d(因为我们要在d盘下创建仓库)
e:\> md svn-repository   //
创建一个名叫svn-repository的目录
e:\> c:   //
进入C
C:\> cd\   //
退到C盘根目录
C:\ > cd D:\devtools\Subversion\bin  //
进入subversion/bin目录
D:\devtools\Subversion\bin> svnadmin create E:\svn-repository\test   //
svnadmin命令创建名为test的仓库(这条命令成功后,在test下会出现很多文件夹和文件)
D:\devtools\Subversion\bin> cd D:\devtools\Apache2\bin   //
进入apache\bin目录
D:\devtools\Apache2\bin> htpasswd -cm E:\svn-repository\test\passwd user1   //
htpasswd命令创建第一个用户(user1),同时生成密码认证文件,c参数为create,m参数为MD5加密方式
New password: ******                 //
输入密码
Re-type new password: ******           //
再次输入密码
Adding password for user test             //
加入用户成功
D:\devtools\Apache2\bin> htpasswd -m E:\svn-repository\test\passwd user2   //
htpasswd命令创建第二个用户(user2),注意如果在这时加入c参数会覆盖掉之前创建的用户及文件。
New password: ******
Re-type new password: ******
Adding password for user test 2   //
加入用户成功
重复以上述操作,添加所有用户。


重新启动apache,进行测试。
IE打开http://svn.company.com/svn,这时应该可以看到
Revision 0: /
--------------------------------------------------------------------------------
Powered by Subversion version <st1:chsdate isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12">1.3.1</st1:chsdate> .    //
说明我们已经配置成功了

<!---->3.       <!---->关于权限的配置

<!---->4.       <!---->更改apache的配置文件httpd.conf在末尾处“AuthzSVNAccessFile”行的注释去掉,后边的参数使用绝对路径如:E:\svn-repository\svnaccessfile
<location svn=""></location><o:p></o:p>

<location svn=""></location>

< L*ocat*ion /s*vn>

DAV svn

SVNListParentPath on

SVNParentPath E:\svn-repository

AuthType Basic

AuthName "Subversion repositories"

AuthUserFile E:/svn-repository/test/passwd

AuthzSVNAccessFile E:\svn-repository\svnaccessfile

Require valid-user

< /L*oc*at*ion **>
(以上有关< /L*oc*at*ion **>的,去掉*使用)
各级目录的访问与修改权限参见下E:\svn-repository\svnaccessfile 如下:

#对用户进行分组,然后把组分配给每一个目录进行权限控掉。

[groups]

admin = admin        

devteam1 = user1

devteam2 = user2,user3

docs = user4

<o:p> </o:p>

#admin组的成员对HealthPlatform库根目录有读的权限有读和写的权限,

# docs devteam1devteam2组的成员对HealthPlatform库根目录有读的权限,

#其它用户对HealthPlatform库没有读与写权限。

#其它目录的权限类同

[HealthPlatform:/]

@admin = rw

@devteam1 = r

@devteam2 = r

@docs = r

* =

<o:p> </o:p>

[HealthPlatform:/docs]

@docs = rw

* = r

<o:p> </o:p>

[HealthPlatform:/project]

@devteam1 = rw<o:p></o:p>

@devteam2 = rw<o:p></o:p>

@admin = r<o:p></o:p>

* = <o:p></o:p>

<o:p> </o:p>

[test:/]<o:p></o:p>

@devteam1 = rw

@devteam2 = rw

@admin = rw

* =

规划完权限后要重启apache.

<o:p> </o:p>

<!---->a)         <!---->代码库初使化

D:\tmp>svn import tp http://svn.surpass.org/svn/test / --username admin --message "t

est"

认证领域: <st1:chmetcnv w:st="on" tcsc="0" unitname="F" sourcevalue="893" numbertype="1" negative="False" hasspace="False">893f</st1:chmetcnv><st1:chmetcnv w:st="on" tcsc="0" unitname="C" sourcevalue="93" numbertype="1" negative="False" hasspace="False">93c</st1:chmetcnv>3-004e-fc<st1:chmetcnv w:st="on" tcsc="0" unitname="F" sourcevalue="4" numbertype="1" negative="False" hasspace="False">4f</st1:chmetcnv>-a<st1:chmetcnv w:st="on" tcsc="0" unitname="a" sourcevalue="38" numbertype="1" negative="False" hasspace="False">38a</st1:chmetcnv>-7db494922394

admin”的密码:**********

新增           tp\test-dev

新增           tp\test-dev\readme.txt

新增           tp\readme.txt

新增           tp\test-test

新增           tp\test-test\readme.txt

<o:p> </o:p>

提交后的修订版为 1

看到以上信息代码库初始化完成.

<o:p> </o:p>

<!---->b)        <!---->从代码库中取出一个版本

D:\tmp>svn checkout http://svn.surpass.org/svn/test / --no-auth-cache --username admin

r

A    test\readme.txt

A    test\test-dev

A    test\test-dev\readme.txt

A    test\test-test

A    test\test-test\readme.txt

取出修订版 1

分享到:
评论
2 楼 surpass_li 2007-09-21  
Subversion备份

 版本控制最关键的一件事是保证数据的安全性,不能因为磁盘损坏,程序故障造成版本库无可挽回的错误,为此必须制定较完备的备份策略。在Subversion中,我们有三种备份方式:完全备份,增量备份
1,  完全备份
最常见和简单的备份就是直接使用拷贝命令,将版本库目录拷贝到备份目录上,就可以了。但是这样不是很安全的方式,因为如果在拷贝时版本库发生变化,将会造成备份的结果不够准确,失去备份的作用,为此Subversion提供了“svnadmin  hotcopy”命令,可以防止这种问题。


如果要把project1备份到d:\svnrootbak目录下,只需要运行:

svnadmin  hotcopy  d:\svnroot\project1  d:\svnrootbak\project1

但是我们作为配置管理员,必须想办法优化这个过程,如果我们这个目录下有许多版本库,需要为每个版本库写这样一条语句备份,为此我写了下面的脚本,实现备份一个目录下的所有版本库。我们在D:\SVNROOT下创建了两个文件,simpleBackup.bat:

@echo  正在备份版本库%1......
 @%SVN_HOME%\bin\svnadmin  hotcopy  %1  %BACKUP_DIRECTORY%\%2
 @echo  版本库%1成功备份到了%2!

这个文件仅仅是对“svnadmin  hotcopy”的包装,然后是backup.bat:

echo  off

rem  Subversion的安装目录
set  SVN_HOME="D:\Subversion"

rem  所有版本库的父目录
set  SVN_ROOT=D:\svnroot

rem  备份的目录
set  BACKUP_SVN_ROOT=D:\svnrootbak

set  BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%
if  exist  %BACKUP_DIRECTORY%  goto  checkBack
echo  建立备份目录%BACKUP_DIRECTORY%>>%SVN_ROOT%/backup.log

mkdir  %BACKUP_DIRECTORY%

rem  验证目录是否为版本库,如果是则取出名称备份
for  /r  %SVN_ROOT%  %%I  in  (.)  do  @if  exist  "%%I\conf\svnserve.conf"  %SVN_ROOT%\simpleBackup.bat  "%%~fI"  %%~nI
goto  end

:checkBack
echo  备份目录%BACKUP_DIRECTORY%已经存在,请清空。
goto  end

:end

你在使用的时候,只需要修改backup.bat开头的三个路径,将两个脚本拷贝到“SVN_ROOT”下就可以了。根据以上的配置,你只需要运行 backup.bat,就可以把“SVN_ROOT”下的版本库都备份到“BACKUP_SVN_ROOT”里,并且存放在备份所在日的目录里,例如 “D:\svnrootbak\2006-10-22”。

虽然这部分工作很简单,可是必须有人定时地去执行这个操作(例如每周一凌晨),为了避免发生遗忘的情况,我们可以将这个操作加入到系统的at任务当中去,例如还是上面的环境,为了安装at任务,我们运行:

at  1:00  /every:M  D:\svnroot\backup.bat这样在每周一凌晨1:00都会执行这个备份过程。当然备份在本机也是不安全的,你也许需要上传到别的机器,这个就要靠你自己去实现了。

2,  增量备份

 尽管完全备份非常简单,但是也是有代价的,当版本库非常巨大时,经常进行完全备份是不现实的,也并不必要,但是一旦版本库在备份之间发生问题,该如何呢,这里我们就用到了增量备份。

增量备份通常要与完全备份结合使用,就像oracle数据库的归档日志,记录着每次Subversion提交的变化,然后在需要恢复时能够回到最新的可用状态。在我们这个例子中我们使用的是,svnadmin  dump命令进行增量的备份,使用方法是:

svnadmin  dump  project1  --revision  15  --incremental  >  dumpfile2

上面的命令实现了对修订版本15进行增量的备份,其中的输出文件dumpfile2只保存了修订版本15更改的内容。

为了记录每次提交的结果,我们需要使用一项Subversion的特性--钩子(hook),看看我们的project1目录:

├─project1
│  ├─conf
│  ├─dav
│  ├─db
│  │  ├─revprops
│  │  ├─revs
│  │  └─transactions
│  ├─hooks
│  └─locks 

其中的hooks目录里存放的就是钩子脚本,我们在此处只使用post-commit钩子,这个钩子会在每次提交之后执行,为了实现我们的备份功能,我们在hooks下建立一个文件post-commit.bat,内容如下:

echo  on
set  SVN_HOME="D:\devtools\Subversion"
set  SVN_ROOT=E:\svn-repository
set  UNIX_SVN_ROOT=E:\svn-repository
set  DELTA_BACKUP_SVN_ROOT=E:\bak\delta
set  LOG_FILE=%1\backup.log
echo  backup  revision  %2  >>  %LOG_FILE%
for  /r  %SVN_ROOT%  %%I  in  (.)  do  if   exist  "%%I\conf\svnserve.conf"  %SVN_ROOT%\%%~nI\hooks\deltaBackup.bat  %%~nI  %2
goto  end
:end 
通过这个脚本,可以实现D:\svnroot下的版本库提交时自动增量备份到D:\svnrootbak\delta(确定这个目录存在),其中使用的deltaBackup.bat其实可以放在任何地方,只是对脚本的svnadmin  dump的包装,内容如下:

@echo  正在备份版本库%2......
 %SVN_HOME%\bin\svnadmin  dump  %SVN_ROOT%\%1  --incremental  --revision  %2  >>  %DELTA_BACKUP_SVN_ROOT%\%1.dump
 @echo  版本库%2成功备份到了%3!

以上两个脚本可以直接拷贝到project2的hooks目录下,不需要修改就可以实现project2的自动备份。

以上的操作已经OK了,现在需要做的是将完全备份和增量备份结合起来,也就是在完全备份后清理增量备份的结果,使之只保存完全备份后的结果。

当果真出现版本库的故障,就要求我们实现版本库的恢复操作了,这是用要使用svnadmin  load命令,同时也需要上次的完全备份例如要把上次完全备份backuprepo,和之后的增量备份dumpfile:

svnadmin  load  project1 <  project1.dump

1 楼 surpass_li 2007-09-07  
Windows下SVN权限配置说明 for SVN 协议

1、        本文档适用于对Subvesion的自带服务svnserve进行权限配置,全部在authz.conf文件中完成。
2、        如果要对含有中文的目录或文件进行管理或分配时,需要将该文件保存为UTF-8格式,微软的记事本保存为UTF-8格式无效,所以不要用。可用如UltraEdit或EditPlus等软件完成,保存时,格式应选择UTF-8 NO BOM。
3、        权限分配时,应遵守从根目录到子目录、从设置最广泛权限到最精细权限、从只读权限到读写权限设置原则,即从根目录开始设置最广泛的访问权限,然后逐步设置下属子目录的访问权限。提示:目录的访问权限既可以分配给组,也可以分配指定用户。
Svn协议下的登录验证与权限控制,分别在版本库的conf目录下,svnserve.conf总配置文件;  passwd.conf存用户名与密码的配置文件; authz.conf存权限配置的文件
现举例进行说明:
启动服务:服务应指向所有版本库的根目录,本例中为D:\SVN,所有版本库都在D:\SVN目录下;
命令如下:
sc create SVNService binpath= "D:\Subversion\bin\svnserve.exe --service -r D:/SVN" displayname= "SVNService" depend= Tcpip start= auto
项目情况:D盘根目录下有一个文件夹SVN,在该文件夹中有jsyxv3、svntest两个版本库(可以有更多个),这些版本库共享使用同一个权限配置文件,目录结构如下:
D:\SVN
|---jsyxv3        (项目一,子目录略)
|---svntest        (项目二,子目录略)
|---authz        (共享的权限配置文件)
|---passwd        (共享的密码文件)

#=====配置开始=====
#分组:
[groups]
group_admin = admin        
group_ user1 = user1
group_ user2  = user2,user3
group_user3 = user4

#设置对根(即SVN)目录下,所有版本库的访问权限
[/]
* = r                #所有登录用户默认权限为只读
@group_admin = rw   #可以分配给组,该组有读写权限
wws = rw            #也可以像这样分配给指定用户

#以下将对各版本库的及其目录进行权限分配
[jsyxv3:/]            #设置对jsyxv3版本库中,所有项目的访问权限
* =                 #未授权用户没有任何权限
@group_user1 = rw

[jsyxv3:/程序管理]    #设置对jsyxv3版本库中程序管理目录的访问权限
* =                 #未授权用户没有任何权限
@group_user2 = rw

[jsyxv3:/项目管理]    #设置对jsyxv3版本库中项目管理目录的访问权限
* =                 #未授权用户没有任何权限
@group_user3 = rw

[svntest:/]            #设置对svntest版本库中,所有项目的访问权限
* =                 #未授权用户没有任何权限
@group_user1 = rw

[svntest:/程序管理]    #设置对svntest版本库中程序管理目录的访问权限
* =                 #未授权用户没有任何权限
@group_user2 = rw
@group_user3 = rw

[svntest:/项目管理]    #设置对svntest版本库中项目管理目录的访问权限
* =                 #未授权用户没有任何权限
@group_user4 = rw
#=====配置结束=====

4、        最后重要提示:
4.1启动的服务与客户端检出的关系:
4.1.1         如果启动的服务指向一个具体的版本库,如红字部分描述:
sc create SVNService binpath= "D:\Subversion\bin\svnserve.exe --service -r D:/SVN/svntest" displayname= "SVNService" depend= Tcpip start= auto
则客户端检出的地址应为:svn://192.168.3.7/
4.1.2         如果启动的服务指向的是多个版本库的父目录,如红字部分描述:
sc create SVNService binpath= "D:\Subversion\bin\svnserve.exe --service -r D:/SVN" displayname= "SVNService" depend= Tcpip start= auto
则客户端检出的地址应为:svn://192.168.3.7/svntest

相关推荐

Global site tag (gtag.js) - Google Analytics