Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1172511
  • 博文数量: 312
  • 博客积分: 12522
  • 博客等级: 上将
  • 技术积分: 3376
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-27 18:35
文章分类

全部博文(312)

文章存档

2016年(3)

2015年(1)

2013年(1)

2012年(28)

2011年(101)

2010年(72)

2009年(13)

2008年(93)

分类: 项目管理

2008-11-03 17:41:23

Subversion的配置和使用

因公司牵移版本控制工具至Subversion的需要编写了此文档,此系列文档是参照subversion相关资料编写的。


Subversion的配置和使用说明



服务器端配置说明
1. 服务器软件下载
2. 服务器的安装
3. 建立版本库(Repository)
4. 配置用户和权限
5. 运行独立服务器
客户端使用说明
1. 客户端下载
2. 客户端的安装
3. 初始化导入
4. 基本客户端操作
5. 分支与合并
 
服务器端配置说明
1,软件下载
* 下载Subversion服务器程序。
到官方网站 的下载二进制安装文件,目前可以下载svn-1.4.4-setup.exe。
下载地址:http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91
此版本支持Apache2.0.x

2,服务器和客户端安装
* 服务器安装,直接运行svn-1.4.4-setup.exe,根据提示安装即可,这样我们就有了一套服务器可以运行的环境。(由于subversion已有自带的svnserver服务器,如果需要使用Apache服务器的特性则再将其集成到apache上即可,此处我们暂时使用它自带的服务器)
(注:apache的配置在文档最后边的附录中可以找到)
* 安装TortoiseSVN,同样直接运行TortoiseSVN-1.4.4.9706-win32-svn-1.4.4.msi按照提示安装即可,不过最后完成后会提示是否重启,其实重启只是使svn工作拷贝在windows中的特殊样式生效,与所有的实际功能无关,为了立刻看到好的效果,还是重新启动机器。

3,建立版本库(Repository)
运行Subversion服务器需要首先要建立一个版本库(Repository),可以看作服务器上存放数据的数据库,在安装了Subversion服务器之后,可以直接运行,如:
svnadmin create E:\svn\sise_repository
就会在目录E:\svn\sise_repository下创建一个版本库。
我们也可以使用TortoiseSVN图形化的完成这一步:
在目录E:\svn\sise_repository下"右键->TortoiseSVN->Create Repository here...“, 然后可以选择版本库模式, 这里使用默认即可, 然后就创建了一系列目录和文件。
如图所示:


在弹出的数据仓库类型我们选择默认的FSFS,点击OK。



4,配置用户和权限
1.来到E:\svn\sise_repository\conf目录,修改svnserve.conf:
# auth-access = write
# password-db = passwd
改为:
auth-access = write     //通过验证的用户才能有读写的权限
password-db = passwd  //验证用户所使用的文件passwd

2.然后修改同目录的passwd文件,去掉下面三行的注释:
# [users]
# harry = harryssecret
# sally = sallyssecret
最后变成:
[users]
harry = 123456   //以名值的方式存储用户名和密码   “用户名=密码”
sally = 654321

3.修改同目录下的authz文件来设置访问权限
在[groups]下创建用户组例如这里是
[groups]
Admin=admin
Developer=developer1,developer2
以上便创建了两个用户组,分别是admin和developer和其相应的组的成员。
设置访问路径
[/]
*=r
@admin=rw
如上所示,所有的用户对整个svn目录下的文件都可以读取,admin组有读写的权限(“*”代表所有的用户,r代表读 w代表写)
可设置具体的版本库的访问权限如下:
[版本库A:/]
@developer=rw
如上设置,表示所有developer组的成员对于“版本库A”下边的所有文件都有读写的权限

5,运行独立服务器
在任意目录下运行:(如果提示找不到svnserve则检查,%Subversion安装目录%\bin是否已添加至环境变量PATH)
svnserve -d -r E:\svn\sise_repository\
我们的服务器程序就已经启动了。
(注:可通过执行 svnserve –help 来得到svnserve的帮助信息)
附:将svnserve安装为系统服务
sc create svnserve binpath= "C:\developertools\Subversion\bin\svnserve.exe --service --root D:\svn\sise_repository" displayname= "Subversion" depend= Tcpip start= auto

另外还有两点需要小心处理。首先,如果路径中包括空格,一定要用“\”处理“"”号,例如上面的例子中如果svnserve.exe在“c:\program files\subversion\”中,则命令应该写为“binpath= "\"c:\program files\subversion\bin\svnserve.exe\"”(“”中的内容),整个命令如下,红色部分是改变部分:

   sc create svnservice
   binpath= "\" C:\developertools\Subversion\bin\svnserve.exe \" --service -r D:\svnroot"
     displayname= "Subversion" depend= Tcpip start= auto

其次,sc对选项的格式还有要求,例如“depend= Tcpip”不能写为“depend =   Tcpip”或“depend=Tcpip”,也就是“=”前不能有空各,而后面必须有空格。
如果服务安装的有问题,你可能需要删除服务。要删除前面添加的服务,只需要运行"sc delete svnservice","svnservice"就是我们创建服务时使用的名字。
 
 
客户端的使用说明
1.客户端的下载
* 下载Subversion的Windows客户端TortoiseSVN。
TortoiseSVN是扩展Windows Shell的一套工具,可以看作Windows资源管理器的插件,安装之后Windows就可以识别Subversion的工作目录。
官方网站是TortoiseSVN,下载方式和前面的svn服务器类似,在下载页面选择目前的最高稳定版本的安装文件TortoiseSVN-1.4.4.9706-win32-svn-1.4.4.msi,还可以sourceforge的语言下载页面中,下载简体中文语言包。
下载地址:

2.客户端的安装
安装TortoiseSVN,同样直接运行TortoiseSVN-1.4.4.9706-win32-svn-1.4.4.msi按照提示安装即可,不过最后完成后会提示是否重启,其实重启只是使svn工作拷贝在windows中的特殊样式生效,与所有的实际功能无关,为了立刻看到好的效果,还是重新启动机器。
3. 初始化导入
来到我们想要导入的项目根目录,在这个例子里是D:\MyWork \Sample,目录下有若干个文件:
1. 右键->TortoiseSVN->Import...



2. URL of repository输入“svn://localhost/Sample”,点击OK。



3、系统提示输入用户名和密码,这里输入harry 密码123456



出现如下窗口表示已添加成功:



至此初始的数据就已经全部导入到了我们刚才定义的版本库中。
 
 
4. 基本客户端操作
CheckOut我们所需要的项目。在我们打算用来存放检出后的项目的文件夹上边右键点击,选择“SVN CheckOut…”。如图:


在弹出的窗口中输入repository的URL地址和checkout后文件的存放路径,如图所示:



点击OK,如果没有报错则表示我们已成功将文件从版本库中检出。
检出后的文件夹将被打了特殊的标记,至此,Sample文件夹和其子目录和文件都被收纳到Subversion的管理中。

未有改动


已有文件发生改变



1、 提交变更了的文件
一旦我们改变了文件夹下边的某个文件时,TortoiseSVN将文件的标志换成感叹号的标记,此时如果我们希望将变更的文件提交到版本库中时,只需在文件上点击右键,选择“SVN Commit..”,在弹出的窗口中输入些次提交的信息和选择需要提交的文件(建议在所有修改过的文件的顶层目录做提交,将某一次的修改一次性提交,利用subversion的原子性可以保证项目不会存在不完整的版本)。如图所示:



点击OK之后文件的变更信息便保存到了Subversion的版本库中去了。

为了确认我们的修改已被提交到版本库,我们可以通过右键点击文件,选择“TortoiseSVN-Show Log”,结果如图。



2、 更新本地拷贝
在文件夹或文件上右键点击选择“SVN Update”,系统将默认的将所选择的文件夹或文件更新至最新的版本。如果更新到特定的版本,可以使用“TortoiseSVN-Update to revision”,在弹出的窗口中选择“Revision 并输入需更新至的版本号”




(注:Subversion的每一次提交对应一颗版本库树的快照,所以update至某一个revision,则是update 至某一颗版本库树的快照。)

3、 添加新的文件或文件夹
在新文件或文件上右键点击选择“TortoiseSVN-Add..”



系统弹出确认窗口



点击OK,文件夹会被标上加号,这个时候还未将其加入至版本库中去,需将其提交,右键“SVN Commit..”,此时所选择的文件或文件夹将被全部添加到版本库中去。

4、 删除文件或文件夹
在欲删除的文件或文件夹上右键点击,选择“TortoiseSVN-delete”,然后再提交,则所选择的文件或文件夹便从版本库删除了。

5、 重命名
如需重命名,需由需由Tortoise来做,不能直接在操作系统上重命名。在欲重命名的文件或文件上右键点击,选择“TortoiseSVN-rename..”,在弹出的窗口中输入新的文件或文件夹名称,点击OK,将会多出一个新命名后的文件或文件夹,再将它们提交。如图(重命名是一个将原文件夹做一次复制然后删除旧文件夹将新的文件夹提交上去的过程,保留历史记录)。



6、 撤销所做更改
在编缉了某些文件或文件后,如果需要返回修改前的版本,则右键点击,选择“TortoiseSVN-Revert..”进行撤销,将文件恢复到修改前的版本。

7、 文件更新的冲突处理
当你Update出现了冲突时,Subversion会产生三个文件如图,
Filename.mine
你更新前的文件,没有冲突标志,只是你最新更改的内容。(如果Subversion认为这个文件不可以合并,.mine文件不会创建,因为它和工作文件相同。)
Filename.rOLDREV
这是你做更新操作以前的BASE版本文件,就是你在上次更新之后未作更改的版本。
Filename.rNEWREV
这是你的Subversion客户端从服务器刚刚收到的版本,这个文件对应版本库的HEAD版本。
这里的OLDREV是你的.svn目录中的修订版本号,NEWREV是版本库中HEAD的版本号。



冲突的文件内容,在冲突的地方将被使用“>>>>”标志出来,用户自己进行合并的取舍。



解决冲突之后,右键选择“TortoiseSVN- resolved..”,Subversion删除冲突所产生三个文件删除,此时你才可以进行提交。( 也可以手动删除此三个文件。)

8、 其它
如图所示,分别对应
Show log 显示文件或文件夹的日志信息
Repo-browser  浏览版本库
Check for modifications  检查出所有修改过的文件的信息
Revision graph    图形化的版本显示



9、 更改验证的用户
在我们保存验证信息后,如果需要更换另一个用户登录,则需右键点击,选择“TortoiseSVN- setings”,然后从左边的选项中选择“Save Data”,点击后边的Authentication data 旁边的Clear按钮清楚缓存的认证信息,下次访问时便会要求重新输入用户名和密码。

 
 
分支与合并

分支的基本概念就正如它的名字,开发的一条线独立于另一条线,如果回顾历史,可以发现两条线分享共同的历史,一个分支总是从一个备份开始的,从那里开始,发展自己独有的历史(如下图所示)



⑴创建分支
假设目前我们版本库中的项目的布局如下图:



如图所示,我们的项目放在了trunk(主线)目录,另外还有branch(分支)和tags(标签)目录,这样的布局是为了更清晰的区别主线、分支和标签三者的位置。
subversion对分支和标签是通过复制一份最新的版本库的快照来实现的。

开始创建分支:
在我们CheckOut的主线目录(trunk)上,右键点击然后选择“Branch/tag…”



在弹出的窗口中,将To Url 指向branch目录并输入分支的具体目录名,这里是mybranch1.0,我们即将创建的分支便存放于此处,点击OK。



Update一下本地的branch目录,你就可以看到你刚刚创建的分支“mybranch1.0”,这样一来我们的分支就创建完成了。




创建分支的最大的目的就是跟主线进行并行开发的时候不影响主线的开发。
因为你在分支上所做的提交都只存于分支上,主线上的Update是看不到分支的修改的。如下图所示,trunk只能看到r344的版本,并看不到r343的版本。



(什么时候应该使用分支呢?例如你接到了一个任务,完成这个任务需要三四个人的合作,你们之间需要共享资源,那们就可以创建一个专为这次任务的分支,参与此次任务的人员则在分支上做开发,等完成之后再合并到主线上,才不会出现将实现了一半的不完成功能也提交到主线上,影响主线的正常工作。又或者自己需要一个较长的开发周期来完成任务,这么长的时间内如果一直没有将资源进行提交,万一丢失了就前功尽弃了。当然分支不是只用于此类情况,还有其它很多种情况也能使用分支来达到目的。)
使用分支需要注意,由于长期的独立开发,可能会在合并回主线时出现较多的冲突。所以在支线上开发间期如果发现主干有更新,而且这个更新有可能将来跟你产生冲突,那你可以先将主线的内容合并到分支上。已免等到做了大量修改再来更新。(其实此过程跟分支合并到主线上是一样的操作,只是目的地不同。)

例如我们在主线上的版本为3,我们如何将此版本的信息合并到分支上呢?


在分支的根目录上右键点击,选择“TortoiseSVNMerge…”。




在这里我们必需先弄明白一个合并背后的关健概念
合并的过程中发生的所有事:首先两个版本库树的比较,然后将区别应用到本地拷贝.
这个命令是包括三个参数的:
1. 初始的版本树 2.最终的版本树 3一个接收区别的工作拷贝。
弄明白这些概念之后我们继续往下操作。
在弹出的窗口中,选择主线目录和其版本号(初始的版本树),再选择主线目录和最新的版本号(最终的版本树),这里也可以是某一个版本号但应该比初始的版本树的版本号要高,接收区默认为你右键所指的目录,这里是mybranch1.0。

在合并之前我们可以通过点击“Unified diff”,查看两版本树之间所有文件的内容的变化,“diff”显示出有发生变化的文件列表,“dry run”能显示真正合并时的状态信息,但并没有做任何的合并操作。
我们点击“Merge”。



在点击“Merge”,合并后的文件(即对分支上的文件补上了主线上修改的内容),如无冲突则可以在分支上像其它文件一样使用了,如果合并后的内容不满意,可以通过撤销来取消这次的合并操作,前提是未对合并后的文件做提交操作。

分支合并到主线跟从主线上合并内容到分支上类似
不同的是
1、开始的版本库是分支创建的版本
2、结束的版本库是完成所以开发工作之后的版本
3、应用的目的是主线目录

关于转换工作拷贝、标签(标签在Subversion中跟分支是相同原理的,一个不去做任何的修改的分支就是版本库某一时刻的一个快照,相当于为某一个版本做了一个标签)
 
 
附录:

使用Apache Web Server 作为Subversion的服务器
1、 在Apache的网站上下载apache 2.0.x版本;
下载地址:

2、 安装Apache Web服务器。
一旦你有了Apache2安装程序,你可以双击它,然后它会指导你的安装过程,请确认你输入的server的URL正确(如果你的服务器没有DNS名称,请直接输入IP地址)。我建议安装Apache为所有用户,在80端口,作为一个服务。注意:如果你已经有了IIS或其他监听80段口的程序,安装会失败,如果发生这种情况,直接到程序的安装目录\Apache Group\Apache2\conf,打开httpd.conf。编辑文件的Listen 80为其他可用的端口,例如Listen 81,然后重新启动-这样就不会那个问题了。
现在可以测试Apache服务器了,将浏览器指向-将会看到一个预先配置的网站。

3、 将Subversion集成到Apache Web Server
首先,使用Windows资源管理器,来到Subversion的安装目录(如C:\developertools\Subversion),找到文件/httpd/mod_dav_svn.so和mod_authz_svn.so,拷贝这些文件到Apache的模块目录,(例如:C:\developertools\Apache Group\Apache2\modules)。
接着,使用记事本之类的文本编辑器修改Apache的配置文件(例如 C:\developertools\ApacheGroup\Apache2\conf\httpd.conf),做出如下修改:
去掉如下几行的注释(删除 '#'标记):
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
将下面几行添加至尾部
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

4、 配置
     现在你已经设置了Apache和Subversion,但是Apache不知道如何处理Subversion客户端,例如TortoiseSVN。为了让Apache知道哪个目录是用来作为Subversion版本库,你需要编辑Apache的配置文件
(例如:C:\developertools\ApacheGroup\Apache2\conf\httpd.conf)
在配置文件最后添加如下几行:
      //Subversion版本库的URL是
DAV svn  //告诉Apache是哪个模块响应那个URL的请求-此刻是Subversion模块
SVNListParentPath on  //显示所有SVNParentPath下的版本库。
SVNParentPath D:\SVN  //告诉Subversion需要查看的版本库位于D:\SVN之下
AuthType Basic  //激活基本认证,就是用户名/密码
AuthName "Subversion repositories"  //认证对话框的信息
AuthUserFile passwd   //指定使用的密码文件
AuthzSVNAccessFile svnaccessfile  //Subversion版本库的访问控制文件的路径
Require valid-user  //只有输入了正确的用户/密码的用户可以访问URL


5、 创建密码文件
     打开命令行提示符(DOS),来到apache2目录(例如C:\developertools\ApacheGroup\Apache2\bin)通过输入下面的命令创建文件
Htpasswd –c passwd  john  //创建一个文件名为passwd的密码文件,并添加一个用户,系统会提示输入密码和密码确认,完成之后新的用户名的密码就被添加至passwd文件里边,密码采用MD5进行加密。
继续往文件里边添加用户和密码
Htpasswd passwd peter
.(注:将产生的文件存放到你配置的AuthUserFile的路径,这里是AuthUserFile C:\developertools\Apache Group\Apache2\conf\passwd)。

最后重新启动Apache,在浏览器中输入,我们这里是 svn/ sise_repository如果一切正常,你会被提示输入用户名和密码,然后你会看到版本库的内容。
省略:
路径为基础的授权
使用Windows域认证
多重认证源

参考资料:
Subversion中文站:
IuseSVN:
阅读(986) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~