SVN 安装与权限设定

来源:百度文库 编辑:神马文学网 时间:2024/04/29 19:45:35

Windows下的SVN服务器安装及配置

文章分类:软件开发管理

准备工作 

  首先先下载Windows版本的SVN服务器(各位都会使用搜索引擎所以就不提供下载地址了),这里我以svn-win32-1.4.3的ZIP解压缩版为例,将其解压缩到目标目录,例如我是解压到D盘下的Subversion目录,把D:\Subversion\bin加到系统环境变量,如果你的解压位置与我不同,那么请按照你的实际路径设置环境变量。 

第一步:创建SVN数据库 

  打开Windows命令提示符,执行命令svnadmin create F:\SVN,svnadmin create是创建SVN数据库的命令,F:\SVN是你的SVN数据库位置,这里我只是举个例子,你可以自己决定SVN数据库位置,执行完以上命令后就会在F盘下多出一个SVN目录,里面有若干目录和文件,conf目录是用来存放权限配置的,后面会详细说明,dav目录用来提供给apache和mod_dav_svn存储内部数据,db目录是所有版本控制的数据文件,hooks目录用来放置hook脚本文件,locks目录存放Subversion文件库锁定数据,用来追踪存取文件库的客户端,format是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号,还有个readme.txt不用说也知道是干什么的了。 

第二步:启动SVN服务器 

  继续在Windows命令提示符里执行命令svnserve -d -r F:\SVN,参数-d是将SVN服务做为后台服务,参数-r是指定SVN服务的根目录位置,F:\SVN自然就是SVN根目录了,到这里为止SVN服务器就已经启动了,可以用SVN客户端测试一下。 

第三步:将SVN服务注册为系统服务 

  你可能会问这样岂不是每次启动SVN服务器都要输入一次命令?怎样才能让SVN服务器在开机的时候自动启动呢?答案就是将SVN服务注册到Windows系统服务,在Windows命令提示符里执行命令 
sc create SVN binpath= "\"d:\subversion\bin\svnserve.exe\" --service -r F:\SVN" displayname= "SVN Service" depend= Tcpip start= auto,这个命令是不是有点长?其实很容易理解,sc是Windows自带的系统服务注册工具,微软支持中心提供了详细的说明,这里我就不再复述了,参数binpath= "\"d:\subversion\bin\svnserve.exe\" --service -r F:\SVN"和我们前面手动启动SVN服务器的命令很像吧?只是把-d改成了--service,这不难理解,因为现在是服务嘛。好了,现在已经大功告成了,重起一下试试吧。 
PS:如果想从系统服务里删除刚才注册的SVN服务可以使用sc delete SVN命令。 

第四步:设置权限 

  各位都是做IT的,为研发中的项目设置合理的权限有多重要就不需要我说了,就拿开发游戏来说吧,程序部门需要有源代码目录的所有权限以及美术资源目录和策划案目录的获取权限,美术部门需要有美术资源目录的所有权限以及策划案目录的获取权限,而策划部门则需要有策划案目录的所有权限及美术资源目录的获取权限。接下去就来看看SVN是如何设置权限的,还记得第一步创建SVN数据库时提到的conf目录吧,conf目录里有3个文件,这3个都是文本文件,用计事本打开它们就行了,我们先看svnserve.conf文件,anon-access项指定了未经验证的用户所具有的操作权限,它有3个有效值,分别是read,write,none,read为读权限,write为写权限,none为没有任何权限,password-db项用来指定存放用户名和密码的文件,authz-db项用来指定存放用户权限的文件,realm项用来指定验证范围,这项一般情况下用不到,以上4项默认都是被注释掉的.#号为注释符,要起用它们只需要把注释符去掉即可。passwd文件是默认存放用户名和密码的文件,例如我设置一个Sol用户,密码为111111,只需在[users]下添加Sol=111111即可,authz文件是默认指定存放用户权限的文件,[groups]代表分组,这里我们设置个developer组,将前面创建的Sol用户分到developer组里,同样只需在[groups]下写上developer=Sol即可,[/]代表根目录,如果我们要设置developer组有完全的访问权限就在下面加上@developer=rw,前面加@符代表组,除此之外我们允许所有人都有读取权限还要在下面加上*=r,SVN允许对每个目录设置权限,设置方法和根目录差不多,如果到这里你还不是很明白那么请看下面的例子。 

一个权限配置的例子 

  我们以游戏项目开发为例,项目名就叫Project1吧,怎么创建SVN数据库上面已经说过了,我们在SVN的根目录下创建一个名为Project1的本地数据库,先配置conf目录下的svnserve.conf文件,我们不允许任何与研发无关的人员访问此项目,因此我们禁止匿名访问并为每个研发人员创建个人帐号,权限文件和帐户信息文件用默认同目录下的authz文件和passwd文件就行了。 

svnserve.conf文件配置如下: 

[general] 
anon-access = none 
password-db = passwd 
authz-db = authz 

  接下去配置passwd文件,为每个研发人员设置个人帐户,假设项目负责人是Sol,程序部门有Tom、Mark,美术部门有John、Alina、Candice、Ellen,策划部门有Terry、Jane,这里我们为了方便将密码全部设置为000000,现在是例子没关系,实际应用的时候密码就不能这么随便设置了。 

passwd文件配置如下: 

[users] 
Sol = 000000 
Tom = 000000 
Mark = 000000 
John = 000000 
Alina = 000000 
Candice = 000000 
Ellen = 000000 
Terry = 000000 
Jane = 000000 

  帐户都创建好了,现在为他们分配不同的权限,先设置4个组.分别是manager 、developer、artist、designer,将Sol分配到manager组里,将Tom、Mark分配到developer组,将John、Alina、Candice、Ellen分配到artist组,将Terry、Jane分配到designer组,等会我们会在项目中创建designs、sources、resources、reports这4个目录,然后在reports目录里为每个人创建一个以自己帐户命名的目录用来放每个人的工作报告,manager组拥有所有目录的读写权限,developer组拥有sources目录的读写权限以及designs和resources目录的读取权限,artist组拥有resources目录的读写权限以及designs目录的读取权限,designer组拥有designs目录的读写权限以及resources目录的读取权限,每个帐户都拥有reports目录下以自己帐户命名的目录的读写权限,也就是说每个人的工作报告只有自己和项目负责人能看到。 

authz文件配置如下: 

[groups] 
manager = Sol 
developer = Tom,Mark 
artist = John,Alina,Candice,Ellen 
designer = Terry,Jane 

[Project1:/] 
@manager = rw 
* = r 

[Project1:/designs] 
@manager = rw 
@developer = r 
@artist = r 
@designer = rw 
* =   

[Project1:/sources] 
@manager = rw 
@developer = rw 
* = 

[Project1:/resources] 
@manager = rw 
@developer = r 
@artist = rw 
@designer = r 
* = 

[Project1:/reports/Sol] 
Sol = rw 
* = 

[Project1:/reports/Tom] 
@manager = rw 
Tom = rw 
* = 

[Project1:/reports/Mark] 
@manager = rw 
Mark = rw 
* = 

[Project1:/reports/John] 
@manager = rw 
John = rw 
* = 

[Project1:/reports/Alina] 
@manager = rw 
Alina = rw 
* = 

[Project1:/reports/Candice] 
@manager = rw 
Candice = rw 
* = 

[Project1:/reports/Ellen] 
@manager = rw 
Ellen = rw 
* = 

[Project1:/reports/Terry] 
@manager = rw 
Terry = rw 
* = 

[Project1:/reports/Jane] 
@manager = rw 
Jane = rw 
* = 

  目录的权限都设置完了,但是目录我们还没有创建,现在只有项目负责人才有权限在项目根目录下创建目录,所以我们用Sol的帐户来创建designs、reports、resources、sources这4个目录,然后再到reports目录里为每个人创建以各自帐户命名的工作报告目录,好了,到这里就全部搞定了,收工。


Subversion(SVN)版本控制安装使用指南

时间:2009-06-12 11:55:03来源:网络 作者:未知 点击:459次
Subversion是近期在开源社区中非常流行的一款版本控制软件,它是CVS的替代产物。
它的主要特征有:

Subversion是近期在开源社区中非常流行的一款版本控制软件,它是CVS的替代产物。
它的主要特征有:

·    CVS大部分的功能。

·    支持“目录”级别的版本管理,并且解决了CVS中迟迟未能解决的文件重命名和移动等问题。甚至对文件或文件夹的属性都提供了版本管理。

·    “提交(commit)”实现了真正意义上的原子操作。也就是类似数据库中的事务的功能。

·    版本号依据每次提交而改变,不再针对每个文件。日志信息也是针对每次提交而设置。所以看到版本号是几百或者几千也不用太惊讶,表示方式不一样罢了。

·    通过WebDAV/DeltaV协议,可以与Apache的网络服务无缝衔接(通过Apache来运行)。这样就能提供一些额外的功能,例如:认证,压缩传输,以及数据仓库(Repository,见下)的浏览等。

·    也可以作为独立服务器运行,但这样的话提供的功能较为简单薄弱。

·    两种运行模式都支持SSH(当然需要各自的支持和配置)

·    降低了分支(Branch)和标签(tag)上的时间消耗。底层设计理念和实现上的不同,不细说了。

·    时间消耗依据的是文件改变部分的大小,而不是数据总量。

·    创建数据仓库时,用户可以指定是使用内嵌的 BerkeleyDB 数据库,还是特定格式的文件系统。

其他还有些零星的小功能,具体可以参阅:http://subversion.tigris.org/roadmap.html

这里解释一下数据仓库的概念:
一个数据仓库对应的可以是一个项目,也可以是多个项目。SVN是基于数据仓库进行管理的。
按照用户习惯,可以只在每个数据仓库内仅放置一个项目的内容。

※下载※

Subversion 1.2.3:
http://subversion.tigris.org/project_packages.html
(SVN的Server端,分不同操作系统的版本,这里我下载的是for windows及for linux的)

TortoiseSVN:
http://tortoisesvn.tigris.org/download.html
(windows下的SVN客户端,以shell方式集成在系统右键菜单中)

Apache 2.0.55:
http://httpd.apache.org/download.cgi
(视操作系统而下)

安装使用※

下面说一下安装,分两种平台(windows,linux)及两种模式(与Apache绑定 vs. Stand-alone)
具体在Apache上的配置倒是大同小异。

另外,SVN是支持SSL的,但是这个配置牵涉到其他太多东西,本文就不过多涉及了。真的有需要可以参考SVN的手册(英文)。

方便起见,用几个变量代表具体的值,请自行加以调整:

%SystemRoot% — windows的系统所在目录,一般类似这样:C:"WINNT
%SVN_HOME% — SVN的安装目录
%SVN_REPO_PARENT% — SVN所有数据仓库的根目录(就是存放全部版本文件的总目录)
%PROJECT_NAME% — 项目名,严格的来说它对应的是一个数据仓库,但是这里遵从用户习惯,以项目名称方式来命名。
%SERVER_NAME_OR_IP% — 服务器名或IP地址
%APACHE_HOME% — Apache2的安装路径

另外,安装过程默认使用文件系统做后台数据库,文中不再加以说明。如需使用BerkeleyDB,请自行参考SVN文档。

Windows上的服务器端安装
____________________________________________

1.双击下载得来的”svn-1.2.3-setup.exe”并安装到”%SVN_HOME%”

2.安装完毕后,”%SVN_HOME%"bin”应该已经自动加入到系统路径(%PATH%)中。如果没有,请手工添加。

3.用命令行来测试安装结果是否正确:

1.cmd

2.svnadmin

如果返回这样的错误信息:”svnadmin.exe - Unable To Locate DLL”,那就需要尝试一下步骤的中的一种或几种:
安装VC++ 6.0(主要是安装VC的运行库)
或者直接从别的机器上拷贝一个”msvcp60.dll”文件到本机的”%SystemRoot%"system32″下

4.使用以下命令创建一个数据仓库,用来存放项目的源代码和其他文件:

1.cmd

2.svnadmin create %SVN_REPO_PARENT%"%PROJECT_NAME%

5.其中%SVN_REPO_PARENT%是包含所有数据仓库的目录,%PROJECT_NAME%是所创建的数据仓库对应的项目名。


*************************
* 以 Stand-alone 模式运行 *
*************************

6.从命令行启动SVN Server:

1.cmd

2.svnserve -d -r %SVN_REPO_PARENT%

注意里面的参数 r 限定了浏览全部数据仓库的根目录

当然如果觉得每次这样启动太麻烦的话,也有SVN Serveice的包装程序(http://dark.clansoft.dk/~mbn/svnservice/)。通过它能够以windows service的方式运行SVN Server(其本质还是Stand-alone),运行起来相对比较方便。

7.创建用户数据库(其实就是一个txt文本,就叫它”users.conf”吧,你也可以改名),保存到
%SVN_REPO_PARENT%"%PROJECT_NAME%"conf
目录(那个conf子文件夹在创建数据仓库时已被自动创建好),然后在这个文件内添加需要的用户名和密码。基本的样例如下:

1.[users]

2.your_username = your_password

注意这里密码是明文存放的,所以也是这种方式的不足之处。

8.在”%SVN_REPO_PARENT%"%PROJECT_NAME%"conf”目录下找到这个”svnserve.conf”文件,用任何文本编辑器打开,为刚才创建的那些用户添加读写权限:

1.[general]

2.anon-access = none              # 匿名访问权限

3.auth-access = write             # 认证用户的权限

4.password-db = users.conf        # 认证用户数据库

5.realm = Anything you want, but generally we use "%PROJECT_NAME%"   # 在用户认证界面上出现的提示语句

里面的”users.conf”就是刚才在第7步创建的用户文件。

9.最后,重启SVN Server(什么?你不知道怎么重启?关掉窗口再重新用命令行启动啦;包装成Service的话么就更加简单了)

现在已经可以使用客户端来连接SVN Server,进行import等操作了。
连接Server的URL应该是类似这样的:

1.svn://%SERVER_NAME_OR_IP%/%PROJECT_NAME%

具体步骤,请参阅第20步。


************************
* 以Apache的模块方式运行 *
************************

10.首先要了解的是SVN设计的时候只考虑了兼容Apache2.x,所以在Apache1.x下是不能正常工作的。

11.安装Apache2
如果事先启动了IIS之类的其他webserver,请先停止那些服务(端口被占用会导致Apache安装失败)。
其他问题可以参考Apache的安装手册。
这里假设安装目录为:%APACHE_HOME%

12.检查Apache2的安装是否成功
打开浏览器,访问:http://localhost/
如果出现的是默认的欢迎页面,那就没有问题了。否则请仔细检查,重新安装。

13.打开Apache的配置文件: “%APACHE_HOME%"conf"httpd.conf”
查找”LoadModule”这个关键字,找到导入模块的区块(section)
反注释掉下面这样,从而加载Subversion所需要的DAV模块:

1.# LoadModule dav_module modules/mod_dav.so

完成之后看起来应该是这样:

1.LoadModule dav_module modules/mod_dav.so

另外在这行下面再添加两行(请注意把路径中的”"”替换成”/”):

1.LoadModule dav_svn_module %SVN_HOME%/bin/mod_dav_svn.so

2.LoadModule authz_svn_module %SVN_HOME%/bin/mod_authz_svn.so

特别需要注意的是:由于模块依赖关系,这三行的出现顺序千万不能颠倒。

14.再来配置一下”httpd.conf”的其他部分,告诉Apache2 SVN的数据仓库所在。
(为避免不必要的麻烦,所有路径中的”"”都请替换成”/”)
注意:

·    按照下述配置,所有数据仓库将共享密码文件及权限文件

·    如果需要为每个数据仓库创建独立的设置,请查阅SVN的文档(”Authorization Option”章节)

添加下述内容:

1.

2.

3.    DAV svn

4.    SVNParentPath %SVN_REPO_PARENT%

6.    #设置通过浏览器访问Repository时的XML格式文件,可以省略

7.    SVNIndexXSLT "/svnindex.xsl"

8.

9.    # 存取权限控制文件所在地

10.    AuthzSVNAccessFile %SVN_REPO_PARENT%/AccessFile

11.    

12.    # 先尝试匿名操作,如有必要再转向用户认证

13.    Satisfy Any

14.    Require valid-user

15.    

16.    # 如何验证用户

17.    AuthType Basic

18.    AuthName "Anything you want, but generally we use %PROJECT_NAME%"

19.    AuthUserFile %SVN_REPO_PARENT%/passwd

20.

21.    #输出时调用Apache的Deflate模块,必须有启用此模块才能这样配,否则删除此行

22.    SetOutputFilter DEFLATE

23.

24.

这里涉及到两个文件: “%SVN_REPO_PARENT%/AccessFile” 及 “%SVN_REPO_PARENT%/passwd”.
并不一定非要放到”%SVN_REPO_PARENT%”目录下,我图方便而已。觉得不安全可以移到另外地方。
这两个文件里面具体内容的设置请参考第16和17步。

15.保存”httpd.conf”并退出,这里Apache2的配置告一段落。

16.”%SVN_REPO_PARENT%/AccessFile”文件的内容

1.[/]

2.* = r

3.user1 = rw

4.user2 = r

5.admin = rw

6.

7.[%PROJECT_NAME%:/src/test]

8.user2 = rw

其中:

·    [/] 指代所有数据仓库的根目录,匿名用户默认的权限为只读。

·    对于”user1″和”admin”,他们对所有数据仓库都有读写权限。

·    对于”user2″,它对所有数据仓库仅有只读权限。但是下方又额外指定了他对”%PROJECT_NAME%:/src/test”目录具有读写权限。

·    综上,他对’test’目录及其子目录(自动继承,除非特别指定)具有读写权限,其他则均为只读权限。

你可以根据需要来设定不同的权限,更详细的说明还需要参考SVN文档中的权限设置章节。

17.”%SVN_REPO_PARENT%/passwd”文件的内容
这个文件是通过”%APACHE_HOME%"bin"htpasswd.exe”自动生成的:

1.cmd

2.cd /D %APACHE_HOME%"bin

3.# 参数c仅在第一次运行时使用,用来创建一个新文件

4.htpasswd –cm %SVN_REPO_PARENT%"passwd user1

5.# 以后添加用户可用此命令,参数m表明需要加密

6.htpasswd –m %SVN_REPO_PARENT%"passwd user2

此时用文本编辑器打开”%SVN_REPO_PARENT%/passwd”,可以看到里面内容是类似这样的:

1.admin:$apr1$HLWV7/..$upZwVGvge0sc28fEp7mGM0

2.user1:$apr1$8sbRo...$hNMdkTvO4t8POVmOkV3Vg.

3.user2:$apr1$ZXzcE/..$5Ir0V8VQQtNYTNnnOp.EU1

18.把SVN自带的XSLT文件拷贝到网站根目录,
然后设置合理权限(windows平台则不必考虑)

1.#这里假设你的网站根目录是    /var/www/html

2.mv /tmp/subversion-1.2.3/tools/xslt/svnindex* /var/www/html

3.chown apache:apache /var/www/html/svnindex*

4.chmod 644 /var/www/html/svnindex*

5.

6.#设置所有者和权限(将权限赋给apache运行的用户身份)

7.chown -R apache:apache %SVN_REPO_PARENT%

8.chmod -R 766 %SVN_REPO_PARENT%

19. 重启Apache2服务:

1.cmd

2.net stop Apache2

3.net start Apache2

20.打开浏览器,访问:http://%SERVER_NAME_OR_IP%/svn/
如果返回的页面是”403 Forbidden”,可能是由于Apache2默认没有打开目录的浏览权限(Option Indexes,参阅Apache2文档),但这并不影响使用。
现在已经可以用客户端导入项目并开始使用了。
具体步骤,请参阅第20步。


***********************************************
* 注意:以下步骤/命令需要在装有SVN客户端的机器上执行 *
* Windows下安装服务器端的时候已经同时安装了客户端 *
* Linux下尚待查证。 *
***********************************************

21.和CVS一样,SVN在最初的时候需要将已有项目导入到数据库中。
从命令行执行以下命令(Stand-alone):

1.svn import c:"temp"myproject svn://%SERVER_NAME_OR_IP%/%PROJECT_NAME% -m "initial import" --username your_username --password your_password

或者(Apache2 module):

1.svn import c:"temp"myprojecthttp://%SERVER_NAME_OR_IP%/svn/%PROJECT_NAME%-m "initial import" --username your_username --password your_password

其中:
A) c:"temp"myproject里面包含了你所要导入的项目文件的内容
B) %SERVER_NAME_OR_IP%是SVN Server的名字或者IP地址,上面存有第5步中创建的数据仓库
C) %PROJECT_NAME%是要导入到的数据仓库名称,这里选择跟项目名一致
D) 参数 m 表明此次导入操作的注释,SVN的注释是按每次提交来定义的,导入也是提交的一种。
E) your_username和your_password是第7和17步创建的用户及密码,注意该用户必须对上面的%PROJECT_NAME%数据仓库有写权限才能成功。

22.然后,需要从Server端再次checkout到本地:
(这点感觉不是太方便,为啥不做成import的时候有个选项,本地目录可以自动生成版本信息呢?)

1.cmd

2.cd /D anywhere_you_want_to_put_your_versioned_project_files

3.svn co svn://myserver/myproject/trunk . --username your_username --password your_password

注意:
“co”是”checkout”的一个别名
那个点[.]代表当前目录,checkout出来的文件会自动放到这个目录下。也可以改为某个绝对路径。

23.对于向SVN Serer增加,移动,删除,或者修改后提交某些文件,参考使用以下命令:

1.Add:    svn add src/myfile.java -m "adding a file"

2.Move:    svn move src/myfile.java src/mynewfile.java -m "moved myfile.java to mynewfile.java"

3.Delete:    svn delete src/myfile.java -m "removing a file"

4.Commit:    svn commit src/myfile.java -m "the message"

对于上面的客户端操作,如果安装了TortoiseSVN,一切就变得简单多了。
不过这个就要抓图来说明了。等有空的时候再放上来。

总结

使用Eclipse的朋友还可以参考这里:http://subclipse.tigris.org/
它以插件的形式向Eclipse提供了SVN的支持。

另外,具体的设置,参数说明等还是需要自己去查阅SVN的文档(在安装server端的时候已经附带)