使用SVN进行版本管理.doc

上传人:hw****26 文档编号:3961405 上传时间:2019-09-04 格式:DOC 页数:25 大小:1.28MB
下载 相关 举报
使用SVN进行版本管理.doc_第1页
第1页 / 共25页
使用SVN进行版本管理.doc_第2页
第2页 / 共25页
使用SVN进行版本管理.doc_第3页
第3页 / 共25页
使用SVN进行版本管理.doc_第4页
第4页 / 共25页
使用SVN进行版本管理.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、 使用 SVN 进行版本管理使用SVN进行版本管理银禾通信软件部1. 简介.31.1. Subversion 是什么?.31.2 Subversion的特性.3使用 SVN 进行版本管理1.3 Subversion的架构.41.4安装Subversion.51.4.1下载文件和安装.51.4.2部署存储库并运行服务端.51.4.3创建项目以及配置访问权限.52. 基本概念.82.1 版本库.82.2文件共享的问题.82.3锁定-修改- 解锁 方案.92.4拷贝-修改- 合并 方案.103. 版本管理.123.1软件配置.123.1.1忽略文件.123.1.2合并比较工具.133.2项目基本流程

2、.143.3代码的版本管理.143.3.1运行独立服务器.143.3.2初始化导入.15 3.3.3仓库目录结构.173.3.4基本客户端操作.183.4版本的回退.213.5分支与分支的合并.223.5.1什么是分支?.22 3.5.2分支合并.23 参考文献: .25使用 SVN 进行版本管理31简介程序员编写程序的过程中,每个程序都会有很多不同的版本,这就需要程序员很好的管理代码,在需要的时间可以取出需要的版本,并且每个版本都有一个完整的说明。我们使用 Sub Version(简称 SVN)作为版本管理工具。但是版本控制的作用不仅在软件开发领域,任何需要管理频繁信息改变的地方都需要它,这

3、就是 Subversion 发挥的舞台。1.1. Subversion 是什么?Subversion 是一个自由/开源版本控制系统,它管理文件和目录可以超越时间。一组文件存放在中心版本库,这个版本库很像一个普通的文件服务器,只是它可以记录每一次文件和目录的修改,这便使你可以取得数据以前的版本,从而可以检查所作的更改。从这个方面看,许多人把版本控制系统当作一种“时间机器” 。Subversion 可以通过网络访问它的版本库,从而使用户可以在不同的电脑上使用。一定程度上可以说,允许用户在各自的地方修改同一份数据是促进协作。进展可能非常的迅速,并没有一个所有的改变都会取得效果的通道,由于所有的工作都

4、有历史版本,你不必担心由于失去某个通道而影响质量,如果存在不正确的改变,只要取消改变。1.2. Subversion 的特性1.2.1 版本化的目录CVS 只记录单个文件的历史,但是 Subversion 实现了一个可以跟踪目录树更改的“虚拟”版本化文件系统,文件和目录都是有版本的。1.2.2 真实的版本历史通过 Subversion,你可以对文件或是目录进行增加、拷贝和改名操作,也可以新增一个具有干净历史的文件。1.2.3 原子提交一系列的改动,要么全部提交到版本库,要么一个也不提交,这样可以让用户构建一个所要提交修改的逻辑块,防止部分修改提交到版本库。1.2.4 版本化的元数据每一个文件或

5、目录都有一套属性键和它们的值,你可以建立并存储任何键/值对,属性也是随时间的流逝而纳入版本控制的,很像文件的内容。1.2.5 可选的网络层Subversion 在版本库访问方面有一个抽象概念,利于人们去实现新的网络机制,Subversion 可以作为一个扩展模块与 Apache 结合,这给了 Subversion 在稳定性和交互性方面很大的好处,可以直接使用服务器的特性认证、授权和传输压缩等等。也有一个轻型的,单独运行的 Subversion 服务,这个服务使用自己的协议可以轻松的用 SSH 封装。1.2.6. 一致的数据操作Subversion 表示文件是建立在二进制文件区别算法基础上的,对

6、于文本(可读)和二进制(不可读)文件具备一致的操作方式,两种类型的文件都压缩存放在版本库中,区别使用 SVN 进行版本管理4信息是在网络上双向传递的。1.2.7 有效率的分支和标签分支与标签的代价不与工程的大小成比例,Subversion 建立分支与标签时只是拷贝整个工程,使用了一种类似于硬链接的机制,因而这类操作通常只会花费很少并且相对固定的时间。 1.2.8 可修改性Subversion 没有历史负担,它由一系列良好的共享 C 库实现,具有定义良好的 API,这使得 Subversion 非常容易维护,可以轻易的用其他语言操作。1.3. Subversion 的架构一端是保存你所有纳入版本

7、控制的数据的 Subversion 版本库,在另一端是你的Subvesion 客户端程序,管理着所有纳入版本控制数据的本地影射(叫做“工作拷贝”),使用 SVN 进行版本管理5在这两极之间是各种各样的版本库访问(RA)层,一些使用电脑网络通过网络服务器访问版本库,一些则绕过网络服务器直接访问版本库。1.4. 安装 Subversion1.4.1 下载文件和安装SVN 服务器端下载地址:http:/subversion.tigris.org/servlets/ProjectDocumentList?folderID=91选择里面最新的 win32 安装包,我选择的是 svn-1.4.2-setu

8、p.exe,因为最新的 1.4.3 只有二进制包,没有安装包。SVN 客户端软件下载地址:http:/ Next 到底。我的安装路径为是 服务端:C:Program FilesSubversion 客户端:C:Program FilesTortoiseSVN服务端安装好后软件会自动在系统的环境变量中增加相应的值,测试是安装完成可以在cmd 命令行中输入“svn”或者“svnadmin”来测试能否运行。1.4.2 部署存储库并运行服务端建立 SVN 的存储库,路径以 D:SVNRepo 为例,创建完该文件后,就进行 Windows 的服务绑定,以便以后每次重启机器后都能自动运行,这里用到的是 W

9、indows 自带的创建服务的命令 sc,在命令行模式下执行:sc create SVNService binpath= “C:Program FilesSubversionbinsvnserve.exe -service -r D:SVNRepo“ displayname= “SVNService“ depend= Tcpip start= auto注意这里的格式,“=”后面是必须空一格的,否则会出现错误。其中的几个路径分别是服务端安装路径和存储库的路径。使用 SVN 进行版本管理6在提示建立成功后,可以直接输入“net start SVNService”来启动服务,或者可以直接在“管理工具

10、”的“服务”中直接启动。1.4.3 创建项目以及配置访问权限进到 E:SVNRepo 目录下,新建一个仓库文件夹 repository,然后新建一个initproject 文件夹来放最初工程,最后新建 wc1 文件夹,如果多个人使用,可以建多个.进到 E:SVNReporepository 目录下,鼠标右键选择TotoiseSVN-Create Repository href.进行创建,创建之前保证该目录下没有任何的文件夹和文件。使用 SVN 进行版本管理7创建成功后会在里面自动生成几个文件夹:dav 目录是提供给 Apache 与 mod_dav_svn 使用的目录,让它们存储内部数据;db

11、 目录就是所有版本控制的数据文件;hooks 目录放置hook 脚本文件的目录;locks 用来放置 Subversion 文件库锁定数据的目录,用来追踪存取文件库的客户端;format 文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号;conf 存放的是配置文件;访问权限的设置方法:在 conf 目录下,用记事本打开 svnserve.conf,设置如下:使用 SVN 进行版本管理8generalanon-access = noneautn-access = writepassword-db = passwd第一个用来设置匿名用户的权限 none 为设置存储库不允许匿名访问

12、;第二个用来设置经过授权的用户的权限 write 为可以写入;第三个用来指定授权用户的密码存放文件在同一目录下打开 passwd,也就是上面设置的,当然你也可以改成其他的文件名,设置如下:usersuser1 = pass1这里就是指定授权访问用户名和密码,格式为:用户名 = 密码多个用户就写多行,设置完之后就大功告成了。接下去就可以开始使用 TotoiseSVN 进行 Import、Update、Checkout、Commit 等操作了。2. 基本概念2.1. 版本库Subversion 是一种集中的分享信息的系统,它的核心是版本库,它储存所有的数据,版本库按照文件树形式储存数据包括文件和目

13、录。任意数量的客户端可以连接到版本库,读写这些文件。通过写,别人可以看到这些信息,通过读数据,可以看到别人的修改.所以为什么这很有趣呢?讲了这么多,让人感觉这是一种普通的文件服务器,但实际上,版本库是另一种文件服务器,而不是你常见的那一种。最特别的是 Subversion 会记录每一次的更改,不仅针对文件也包括目录本身,包括增加、删除和重新组织文件和目录。当一个客户端从版本库读取数据时,通常只会看到最新的版本,但是客户端也可以去看 以前 的任何一个版本。 举个例子,一个客户端可以发出这样的历史问题 “上个星期三的目录是怎样的? ”或是 “谁最后一个更改了这个文件,更改了什么? ”, 这些是每一

14、种版本控制系统的核心问题:系统是设计来记录和跟踪每一次改动的。2.2. 文件共享的问题所有的版本控制系统都需要解决这样一个基础问题:怎样让系统允许用户共享信息,而不会让他们因意外而互相干扰?版本库里意外覆盖别人的更改非常的容易。考虑 下图 “需要避免的问题”的情景,我们有两个共同工作者,Harry 和 Sally,他们想同时编辑版本库里的同一个文件,如果首先 Harry 保存它的修改,过了一会, Sally 可能凑巧用自己的版本覆盖了这些文件,Harry 的更改不会永远消失(因为系统记录了每次使用 SVN 进行版本管理9修改),Harry 所有的修改 不会 出现在 Sally 的文件中,所以

15、Harry 的工作还是丢失了至少是从最新的版本中丢失了而且是意外的,这就是我们要明确避免的情况!2.3. 锁定-修改-解锁 方案许多版本控制系统使用 锁定 -修改 -解锁 这种机制解决这种问题,在这样的系统里,在一个时间段里版本库的一个文件只允许被一个人修改。首先在修改之前,Harry 要“锁定”住这个文件,锁定很像是从图书馆借一本书,如果 Harry 锁住这个文件,Sally 不能做任何修改,如果 Sally 想请求得到一个锁,版本库会拒绝这个请求。在 Harry 结束编辑并且放开这个锁之前,她只可以阅读文件。Harry 解锁后,就要换班了, Sally 得到自己的轮换位置,锁定并且开始编辑

16、这个文件。 下图 “锁定-修改- 解锁 方案”描述了这样的解决方案。使用 SVN 进行版本管理10锁定-修改- 解锁模型有一点问题就是限制太多,经常会成为用户的障碍: 锁定可能导致管理问题。有时候 Harry 会锁住文件然后忘了此事,这就是说 Sally一直等待解锁来编辑这些文件,她在这里僵住了。然后 Harry 去旅行了,现在Sally 只好去找管理员放开锁,这种情况会导致不必要的耽搁和时间浪费。 锁定可能导致不必要的线性化开发。如果 Harry 编辑一个文件的开始, Sally 想编辑同一个文件的结尾,这种修改不会冲突,设想修改可以正确的合并到一起,他们可以轻松的并行工作而没有太多的坏处,

17、没有必要让他们轮流工作。 锁定可能导致错误的安全状态。假设 Harry 锁定和编辑一个文件 A,同时Sally 锁定并编辑文件 B,如果 A 和 B 互相依赖,这种变化是必须同时作的,这样 A 和 B 不能正确的工作了,锁定机制对防止此类问题将无能为力从而产生了一种处于安全状态的假相。很容易想象 Harry 和 Sally都以为自己锁住了文件,而且从一个安全,孤立的情况开始工作,因而没有尽早发现他们不匹配的修改。2.4.拷贝-修改-合并 方案Subversion,CVS 和一些版本控制系统使用拷贝-修改- 合并模型,在这种模型里,每一个客户联系项目版本库建立一个个人工作拷贝版本库中文件和目录的本地映射。用户并行工作,修改各自的工作拷贝,最终,各个私有的拷贝合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。这是一个例子,Harry 和 Sally 为同一个项目各自建立了一个工作拷贝,工作是并行的,修改了同一个文件 A,Sally 首先保存修改到版本库,当 Harry 想去提交修改的时候,版本库提示文件 A 已经 过期 ,换句话说, A 在他上次更新之后已经更改了,所以当他通过客户

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。