Subversion 版本控制 ( Version Control with Subversion ) 李树仁 2007-01-19
Subversion 1. Subversion 简介 2 、版本控制的基本知识 3 、 subversion 常用功能讲解 4 、客户端工具 tortoiseSVN 5 、 eclipse 插件 subeclipse 的使用介绍 6 、使用 svn 中常见问题 7 、 csdb 版本管理规则
一、 Subversion 简 介 • 版本控制是管理信息变更的一门艺术。 • 版本控制工具早已经成为许多程序员的主要工具之 一。 • 版本控制软件的用途并不仅限于软件开发的领域 , 只要人们使用计算机来管理经常变更的信息,就需 要使用版本控制工具 。 • Subversion 的一个概括性的介绍: Subversion 是 什么?它用来做什么?以及如何得到它 。
什么是 Subversion ? • Subversion 是一个自由的、开放源码的版本控 制系统 • 它可以管理各个时刻的文件和目录 。 • Subversion 将文件存放在 repository 库中。这个 仓库非常类似于一个普通的文件服务器 ,只是 它还可以记录文件和目录曾经做过的每一次变更 。 • 可把版本控制系统比作一种“时间机器” 。
什么是 Subversion ? • Subversion 的仓库可以通过网络来访问,允许不 同的用户在不同的计算机上使用 。 • 不同的使用者可以进行协同工作 。而且所有工作 都是有记录的,如果有错只要撤销就可以。 • Subversion 只是版本控制系统,不是软件配置管 理系统 (SCM) 。 • 它是一个通道,可以管理任何计算机中的文件系 统。
What is Subversion not ? • svn is not a build system . • svn is not a substitute for management. • svn is not a substitute for developer Communication. • svn does not have change control . • svn is not an automated testing program.
Subversion 的历史 • CVS 有明显的局限性和功能上的不足。 • 2000 年开始 , CollabNet 公司 就开始着手开发新的版 本控制系统来代替 CVS 。 • Karl Fogel 和 Jim Blandy 是 CVS 开发者,加入到开发 subversion 当中。 • 他们让 Subversion 来使用 CVS 的特性,并且保留相 同的开发模型 ,但是避开 CVS 的那些明显的缺陷 。 • Subversion 于 2001 年 8 月进入“自测”阶段 。
Subversion 的特色 •
目录控制 – CVS 只能跟踪单个文件的历史,而 Subversion 实 现了一个 " 虚拟 " 的受控文件系统,可以跟踪整个目 录的变更。
• 真正的版本历史 – 由于 CVS 只限于记录文件的版本信息,像文件复 制、重命名这样的操作它就不支持 ,在 Subversion 中我们可以添加、删除、复制和重命名文件和目录 。
Subversion 的特色 • 原子化提交 – 一个变更集要么完整地被提交到仓库中,要么不做 任何改变 ,从而避免发生不完整地提交变更的情况 。
• 受控元数据 – 每一个文件和目录都有一个与其对应的属性集 。
• 可选的网络层 – Subversion 仓库的存取是一个抽象概念,有利于其 他人实现新的网络访问机制 , Subversion 可以作为 一个外部模块插入到 Apache HTTP 服务器中 。
Subversion 的特色 • 一致的数据处理 – Subversion 使用一种二进制的比较算法来表示文件 之间的区别 。
• 高效的分支和标记 – 分支和标记所带来的开销与项目的规模并没有直接 的关系 , Subversion 在创建分支和标记时使用类似 “连接”的方式来复制项目 。
• 扩展能力 – 它是由一组设计良好的 APIs 实现的,包含在 C 的 共享库中 ,这使得它很容易维护。也很容易被其他 应用程序或语言使用 。
Subversion 的体系结构
Subversion 的体系结构 • 典型的 client/server 模式结构 • 在系统的一端是存放着所有受控制数据的 Subversion 仓库。 • 另一端是 Subversion 的客户端程序,管理着受控数据 的一部分在本地的映射(称为“工作副本”)。 • 在这两端之间,是通过各种仓库存取层( Repository Access,RA )的多条通道。这些通道中,有些要使用计 算机网络,再通过用来访问 Subversion 仓库的服务器。 而有些则完全绕过了网络,直接对仓库进行操作 。
Subversion 的安装 • Subversion 是建立在一个叫做 APR ( the Apache Portable Runtime library )的可移植运行库之上的 。 • Subversion 可以运行在任何 Apache 服务器可以运行 的操作系统之上: Windows 、 Linux ,各种类型的 BSD 、 Mac OS X , Netware 以及其他的系统。 • 获得 Subversion 的最简单的方法就是下载适合于你的 操作系统的二进制软件包 • Subversion 的站点( http://subversion.tigris.org ) • Windows 安装是图形化界面, linux 安装较复杂,另有 讨论。
Subversion 的组件 • Svn – 一个命令行的客户端程序
• Svnversion – 报告本地工作副本状态(当前档案的修订版本号表 示)的程序
• Svnadmin – 用来创建或者是修复仓库的工具
• svndumpfilter – 过滤资源库程序
Subversion 的组件 • mod_dav_svn – Apache 服务器的一个插件模块,用来使其他人可以 通过网络访问这个仓库
• svnserve – 一个定制的、独立的 Subversion 服务程序。可作为 一个驻留进程运行或者是由 SSH 调用。是使仓库可 以被别人通过网络访问的另一种方法
• 常用的组件是 svn 和 svnadmin ,有图形化客户端 来实现 svn 和 svnadmin 功能。
Subversion 快速入门 • 运行下面的例子,必须确保 svn 和 svnadmin 这两 个工具正常运行。 • 同时还必须保证你的 svn 工具是针对 Berkeley DB 编译的 。 • 可以运行 svn --version 然后检查 ra_local 模块 是否可用来确认 ,如果没有这个模块,我们的 客户端程序将无法访问 file://URLs
Subversion 快速入门
Subversion 快速入门 • $ svnadmin create /path/to/repos • ls /path/to/repos – conf/ dav/ db/ format hooks/ locks/ README.txt
•
这个命令创建了一个包含 Subversion 仓库的目 录 /path/to/repos 。另外,这个目录必须创建在 本地磁盘,而不能是在网络共享磁盘上
• 下一步,准备一个类似下面例子中的用来导入的 文件、目录树。在树结构中,应该包含三个顶层 目录: branches 、 tags 和 trunk
Subversion 快速入门 /tmp/project/branches/ /tmp/project/tags/ /tmp/project/trunk/ foo.c bar.c Makefile ...
Subversion 快速入门 • 一旦你准备好了目录树,就可以使用 svn import 命令 来导入数据到仓库中了 •
svn import /tmp/project file:///path/to/repos -m "initial import" Adding /tmp/project/branches Adding /tmp/project/tags Adding /tmp/project/trunk Adding /tmp/project/trunk/foo.c Adding /tmp/project/trunk/bar.c Adding /tmp/project/trunk/Makefile ... Committed revision 1.
Subversion 快速入门 • 现在,仓库中就有了整个目录树中的数据 • 为了开始操作仓库中的数据,我们需要先创建一个 数据的“工作副本( working copy )”出来 。 • 这类似于一种私有的工作区 ,向 Subversion “check out” (借出)一份仓库中 trunk 目录的工作副本 : – $ svn checkout file:///path/to/repos/trunk project
• 在一个新的 project 目录下就有了仓库中一部分数 据的一个私人副本 ,可以在本地工作副本上编辑某 个文件,然后再将那些修改提交到仓库中 。
二、版本控制的基本知识 • 仓库( The Repository ) • 版本控制模型 • 实际工作中的 subversion • subversion/cvs/vss 比较
仓库( The Repository ) • Subversion 是一个集中式的系统。它的核心是一 个用来存放数据的中心仓库。中心仓库使用典型 的文件和目录层次结构――树状结构来存储信息 。 • 许许多多的客户端可以连接到中心仓库,然后读 取或者写入文件 。 • 客户端通过写文件来使其他人共享,也可以读取 其它客户端所写入的文件。 • 典型的客户端 / 服务器系统模型 ,如图所示:
仓库( The Repository )
仓库( The Repository ) • 仓库就是一种文件服务器,只是不是通常的那种 。 • Subversion 仓库可以记录写入仓库的每一次更改 。 – 这些更改包括对每一个文件的每一次修改,甚至是对目录本身 的修改,例如添加文件、删除文件和对文件和目录的重新编排。 这些特性使得 Subversion 仓库与一般的文件服务器相比较为 特殊。
• 客户端同样可以读取文件和目录以前某个时刻的状态 。 • 版本控制系统的核心:记录和跟踪数据的修改历史 。
版本控制模型 •
版本控制系统的核心任务是使得数据可以协作 处理和共享。但是不同的系统使用不同的策略来 达到这个目标 。
• 文件共享的问题 。 • “ 锁定―修改―解锁” 方案 • " 复制―修改―合并 " 方案
文件共享问题 所有的版本控制系统都必须解决一个共同的基本 问题:如何让用户来共享信息,并且还要避免他 们不小心覆盖掉别人对仓库中数据作过的修改?
" 锁定―修改―解锁 " 方 案
• 许多版本控制系统都使用“锁定―修改―解锁”模 型来解决这个问题 ,诸如: VSS • 在这样一个系统中,仓库在一个特定的时刻只允 许一个人对某个文件进行修改 。
" 锁定―修改―解锁 " 方 案 • 这种方案的问题是它有一点过于严格了,经常会 阻塞用户的使用 。 • 锁定可能会带来管理问题 。 • 锁定可能导致不必要的串行工作 。 • 锁定可能会引起潜在的不安全性 。
" 复制―修改―合并 " 方案 • Subversion 、 CVS 以及其他一些版本控制系统使用“复 制―修改―合并”模型来代替锁定 。 • 每一个用户的客户端软件从中央仓库创建出一份个人的 工作副本――仓库中文件和目录的本地映射 。 • 用户就可以并行工作,修改手中的私有副本 。 • 这些私有副本合并成为一个全新的版本 。 • 版本控制系统常常需要合并,但是最终,操作者本身必 须负责让合并工作正确进行 。
" 复制―修改―合并 " 方案
冲突( conflict ) • 如果 Sally 的修改会覆盖掉 Harry 的工作怎么 办?这种情况叫做 " 冲突( conflict ) • 当 Harry 要求他的客户端软件合并仓库中的最 新修改到工作副本时,文件 A 被标记为冲突状 态。 •
遇到这种情况,只有人本身才有能力理解和做 出合理的选择 。注意,软件并不能自动解决冲 突。
• 用于解决冲突的时间远远少于锁定系统所带来的 时间浪费。
解决冲突的关键是用户交 流 最终,我们将所有的问题归结为一个关键因素: 用户交流。如果用户很少交流,不论是语法的还 是语义的冲突都会增加。没有哪个系统可以让用 户完美地交流,也没有哪个系统可以自动检查出 语义上的冲突。所以,不要被那种锁定系统可以 解决冲突的虚假承诺所麻痹,事实上,锁定系统 除了限制生产力之外一无是处。
实际中的 Subversion • 工作副本 Working Copies • 资源库存储的不同方式 URLs • 修订本 • 工作副本如何跟踪仓库 • 混合型修订版的局限性
工作副本 Working Copies •
一个 Subversion 的工作副本其实就是本地系统 中的一个普通的文件目录树 。
• 可以使用任何方式来编辑这些文件。如果是源代 码文件的话,你也可以像通常情况那样去编译它 们。 • 工作副本是你的私人工作区 。 • 如果你不明确的要求, Subversion 绝不会合并其 他人的修改,也不会让其他人看到你做的修改 。
工作副本 Working Copies
• 在你已经修改完工作副本中的文件,并且确信修改正确后 ,就可以将这些修改公开给同一个项目中的其他工作人员。 Subversion 提供了将文件写入仓库的命令 。 • 工作副本中也包含一些额外的文件。它们是由 Subversion 创建和维护的,用来辅助完成这些命令。 • 最典型的情况是,每一个目录都包含一个叫做 .svn 的子 目录 。该目录也被称为“工作副本管理目录”。 • 一个 Subversion 的仓库会包含几个项目,而每一个项目 都是仓库的目录的一个子目录。这样,用户的工作副本也 就对应于仓库中一个特定的子目录。
工作副本 Working Copies
资源库存储的不同方式 URLs 样式 file:///
存取方式 直接从本地磁盘上访问仓库
http:// 通过 WebDAV 协议访问 Apache 服务器,而访问 仓库 https://
和 http:// 相同,但使用 SSL 来作加密
svn://
通过自定义的协议访问一个 svnserve 服务器
svn+ssh://
和 svn:// 相同,但通过一个 SSH 通道来使用
修订本 •
一个 svn commit 操作可以将任意数量的文件和目录的修 改发布作为一个单独的原子事务来处理 。
• 在仓库中,每一次提交都被作为一个原子事务来对待 。 • 每当仓库接受一次提交,仓库中的文件系统目录都会创建一 种新的状态,叫做一个修订本。 • 每一个修订本都被赋予一个唯一的自然数,并且每一个修订 本的数字都比前一个要大。刚刚建立的仓库的初始的版本是 0 ,只包含一个空的根目录。 •
Subversion 的修订版编号是针对整个目录树的,而不是某 一个独立的文件 。
修订本 •如图所示:
设想一个修订版编号的数列,从 0 开始,从左延伸到右。每 一个修订版编号都对应一个画下面的目录树,而每一个目录 树就是在每一次提交之后的仓库的 " 快照 " 。
混合型修订版 • 一般的原则上, Subversion 努力使自己尽可能的 灵活。一个典型的灵活性的体现就是允许工作副本 中包含有混合的修订版编号的能力。 • 在完成向仓库的提交之后,刚刚提交的文件和目录 就拥有了最新的修订版编号,而其他文件没有。
混合型修订版的局限性 • 第一,在你没有对文件或目录完全更新之前,你无 法提交对他们的删除操作 。 • 第二,在还没有完全更新之前,你将无法提交一个 对目录元数据修改的操作 。
subversion/cvs/vss 比较 svn
cvs
vss
工作模式
Copy-Modify-Merge
Copy-Modify-Merge
Lock-Modify-Unlock
粒度
目录级
文件级
文件级
本地文件、专有服务器
本地文件
访问存储库方 本地文件、专有服务 器、 webdav 式 访问授权
基于 apache 目录授权
?
专有管理工具
分支和标记
支持,高效实现
支持
不支持
使用方式
多种专有工具、 IDE 集成、命 多种专有工具、 IDE 集成 专用工具,使用方便 令行 、命令行
分支、标记处 高效实现,相同文件在实现时 不同分支、标记中相同文 无分支、标记概念 通过链接实现,不占用额外空 件需占不同空间 理 间
三、 Subversion 之 旅 • 基本术语 • 主要讲解 SVN 客户端工具的常用命令 • 通过本部分的学习,可以操作所有任务在日常 使用 subversion 版本控制系统
术语 • 修订版( revision ) – 存储库接受的每一次修改产生新的修订版 – HEAD :存储库中最新版本 – BASE :
• 分支( branches ) • 标记( tags ) • 合并( merging )
Subversion 客户端工具 • 命令行工具 – 通过命令行方式,主要命令包括: • svn :基本 svn 命令 • svnadmin :存储库管理 • svnlook :存储库查看
• TortoiseSVN – 与 windows 资源管理器集成
• subclipse – 与 eclipse 集成
Subversion 常用操作 • import - 将本地目录导入存储库 • Checkout - 从存储库创建目录树的本地工作拷贝 • update - 将存储库中文件同步到本地工作拷贝中 • commit - 本地工作拷贝中文件修改提交到存储库中 • add - 将本地文件加入到存储库中 • remove - 从存储库中删除一个文件 ( 保留历史记录 ). • move - 在存储库中讲一个文件移到另一个位置
Subversion 推荐目录结构 • 存储库 – 项目名 • trunk :主版本 • branches :分支版本(独立版本) • tags :标记版本,比如发行版 v 1.0/ v 2.0 等等
工作拷贝、存储库同步的状态 commit
update
工作拷贝
存储库
未修改
未修改
未修改
已修改
已修改
未修改
将本地修改提交 到存储库中
已修改
已修改
出现过期错,要 将存储库的修改 首先 update 合并到工作拷贝 中
从存储库中取出 最新版本
Svn 常用命令介绍 • Help • Import • Checkout • Update your working copy – Svn update
• Make changes – add – delete – copy – move
Svn 常用命令介绍 • Examine your changes – status – diff – revert
• Merge others’ changes – Merge – Resolved
• Commit your changes – commit
help •
C:\>svn help
•
用法: svn <subcommand> [options] [args]
请使用 “ svn help <subcommand>” 显示子命令的辅助说明。 大多数的子命令可接受文件或目录参数,对目录进行递回存取。 如无指定参数给命令,默认将会自当前的目录 ( 包含 ) 进行递归存取
import •
import: 提交未纳入版本控制的文件或目录树至档案库
•
用法: import [PATH] URL
•
递归地提交 PATH 的拷贝至地址 (URL) 。如果省略 PATH ,默认为 ‘ .’ 。父目录会依需要于档案库内建立。
•
举例: D:\>svn import -m "import directory" --username lsr --password lsr ./monitor
https://localhost/svn/reposs
checkout •
checkout (co): 从档案库签出工作拷贝
•
用法: checkout 地址 ... [ 路径 ]
•
例如: D:\gg>svn co https://localhost/svn/reposs
update •
将档案库的改变反应至工作拷贝
•
用法: update [PATH...]
•
例如: D:\private\publish\ 个人信息 >svn update 于修订版 48 。
Make changes •
Add : –
•
Delete –
•
拷贝文件,然后 commit
Move –
•
删除在库中的文件或者目录,然后 commit 。
Copy –
•
增加文件或者目录到资源库中,然后 commit 。条件是该 文件或者目录已经在相应的目录上。
移动文件或目录到另外目录中,相当于拷贝、删除的组合。
以上的命令是针对工作副本进行的,所以要 commit 才有效
Examine your changes •
Status –
显示工作拷贝目录与文件的状态 。
–
用法: status [PATH...]
–
svn status wc M
wc/bar.c
A + wc/qax.c •
•
Diff –
diff (di): 显示两个路径中的差异
–
D:\repos\webtest\trunk>svn diff -r 19:25 Project.java
Revert –
恢复原始未改变的工作拷贝文件 ( 恢复大部份的本地修改 )
Merge others’ changes •
Merge – 将两个来源之间的差异应用至工作拷贝路径
•
Resolved – 移除工作拷贝的目录或文件的 ' 冲突 ' 状态
Commit your changes •
Commit – commit (ci): 把改变从工作拷贝发送到档案库。 – 用法: commit [ 路径 ...] – 日志信息必须提供,但可以是空的 – D:\fff>svn commit -m "lishure"
正在发送
hh.txt
传输文件数据 . 提交后的修订版为 14 。
Other userful commands •
Cleanup
•
List
•
Cat
•
Log
•
mkdir
四、客户端工具 tortoiseSVN
•
tortoiseSVN 介绍
•
tortoiseSVN 的使用
tortoiseSVN 介绍 •
Windows 操作系统客户机
•
图形化界面,集成了 svn 和 svnadmin 命令行工 具的功能。
•
该客户机集成于资源管理器功能中,使用方便,易 于掌握。
•
直接安装 TortoiseSVN-1.1.1-UNICODE_svn1.1.1.msi ,方法同一般软件安装相同
tortoiseSVN 使用介绍 一旦该客户机安装成功,在指定目录单击右键 ,弹出菜单中,增加了几项,如图所示:
tortoiseSVN 使用介绍 •
如上图所示,在资源管理器菜单中增加了, svn checkout 命令菜单和其他命令,诸如:浏览指定的资源库、创建资源库 、从资源库中导出资源、从指定目录中导入到资源库中。
•
还有一些有关设置 tortoisesvn 工具的参数。
•
如果指定的目录已经被纳入到特定的资源库中,那弹出的菜单 参数更多,如目录 private 已经被 subversion 管理了,它就 是一个工作副本,如下图所示:
tortoiseSVN 使用介绍
tortoiseSVN 介绍 •
如上图所示,弹出菜单中含有更多的 svn 命令 – Update – Commit
•
含有 svn 的所有命令,但是操作比 svn 命令行 方式方便多了。
•
通过该客户机可以很快掌握 svn 命令,同时很 好的对自己所属的工作拷贝进行管理
插件 subeclipse 使用 •
subclipse_0.9.3.1 适合 eclipse2.0 使用
•
site.0.9.28 适合 eclipse3.0 使用
•
重点介绍 site.0.9.28 插件的安装和使用
subclipse_0.9.3.1 •
该插件适合 eclipse2.0 版本,下载网站是:
•
http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID =1730,选择最新版本 Sublipse 0.9.3.1.zip 。
•
我们开发部网站也有该插件,最新版本的
•
下载 Sublipse 0.9.3.1.zip
•
解压到 eclipse 安装目录的父亲级目录 ,例如,如果你的 eclipse 安装在 c:\eclipse ,那么解压到 c:\ 。或者把解压 后的 eclipse 目录与 eclipse 安装目录覆盖也可以
site.0.9.28 安装步骤 •
该插件适合 eclipse3.0 版本。下载网站与 2.0 一样,只是下载的版本不用,选择最新版 site.0.9.28.zip 。需要注意的是,二者安装 有所不同,前者是直接解压到适合目录就安装 成功,后者是利用 eclipse 提供的软件更新工 具
•
开发部网站上有最新版本的可下载。
•
下载一个压缩文件,诸如 site.0.9.28.zip , 解压到本地一个目录里 。
site.0.9.28 安装步骤 •
解压后的目录结构如下所示:
site.0.9.28 安装步骤 •
启动 eclipse3.0 ,选择 Help -> Software Updates -> Find and Install ,中文界面的是: 帮助 -> 软件更新 -> 查找并安装。
•
选择“ Search for new features to install” and click Next ,中文界面的是:搜索要安装的新 功能部件,点击“下一步” 。
•
点击 “ New Local Site” ,中文界面的是:新建 本地站点 。
•
查找下载插件所在的路径,并选择 <parent folder>/update and click OK
site.0.9.28 安装步骤 •
你将能看见该你的站点,选择它并点击下一步 ,如图所示 :
•按照向导,并重新启动 eclipse ,即完成了安装
Subeclipse 的使用 •
安装完成后。重新启动 eclipse 后,打开窗口 > 打开透视图,其他,如图所示
Subeclipse 的使用 •
如上图所示,透视图里多了 SVNRepository 透视图, 选中该透视图,点击“确定”按钮,进入 svn 透视图, 该透视图由以下视图组成,如图所示 :
Subeclipse 的使用 •
视图包括: SVN Repository 、 SVN Resource History 、 SVN Properties 、 SVN Annotate 、 pendling SVN Operations 。其中 SVN Repository 视图是最主要的,也是通过该视图 进行新建连接 repository 库和操作 repository 库 、等操作。其余视图都是围绕该视图展开。
Subeclipse 的使用 •
新建 repository 连接,在 SVN Repository 视图中 单击右键,按出菜单,然后新建 repository 连接 ,如图所示 :
Subeclipse 的使用 •
点击增加 repository 后,添加一个新的 SVN Repository 库到 SVN Repositories 视图,这里需要说明 的, repository 库必须首先建立后,用 svnadmin 工具建 repository 库。如图所示 :
Subeclipse 的使用 •
url 是 repository 库所在地方, url 可以是: file:/// 、 svn:// 、 http:// 和 https:// 这样几种方 式。在这里是 https 方 式, https://localhost/svn/MyNewRepository , 在 svn 虚拟路径下有一个名叫 repository 的 sub 版本库。
•
由于采用 apache 认证方式,需要帐号和密码。 如果帐号认证正确,即可连接该 sub 库 。
Subeclipse 的使用 •如图所示:
资源库 repository 的操作 •
如上图所示,你可以打开相应得文件进行察看 ,诸如: txt 、 java 等源文件,但是不能对该 文件进行编辑,因为他是只读的,这些文件都 是在服务器端的,只有把这些文件 checkout 本 地的 working copy 后才可以自由操作该项目中 的文件。
•
点击右键版本库中的具体文件,弹出菜单,如 图所示 :
资源库 repository 的操作
资源库 repository 的操作 •通过弹出菜单可以对该文件进行复制、删除、打开 、移动和重命名等操作。一旦在 SVN Repositories 视 图中有操作,那么在版本历史视图中可以察看到版本 号的变化和相应得操作。 •点击右键一个库中的路径,弹出菜单,可以从资源 库中导出项目到工作拷贝中,如图所示
资源库 repository 的操作
六、使用 svn 中常见问题 •
Working copy 工作区与一般目录的混淆
•
本地版本管理与服务器版本管理
•
更新和提交( COMMIT UPDATE )
•
命令行客户端与 GUI 以 IDE 插件 之间的关系
•
合并和冲突
•
标签 TAGS 和 分支 BRANCHES TRUNK
•
解决冲突的方法
七、 csdb 版本管理规则 •
1 、项目负责人和版本管理员负责架构项目目 录结构,包括配置文件、第三方 JAR 文档
•
2 、项目负责人分配开发人员目录权限,由版 本管理员负责实施 ,权限分配粒度要细
•
3 、 trunk ,tags ,branches , 项目负责人、 协同版本管理员构建 tags 和 branches
•
4 、版本管理员负责解决开发人员在开发过程 中的有关版本问题
七、 csdb 版本管理规则 •
5 、开发人员每次修改,或者新增、删除、拷 贝工作区对象后,应该立刻提交到版本库,有 效保持工作区与资源库的高度一致 ,每天下 班之前提交、(更新)
•
6 、开发人员在每次修改工作区中代码或者文 档时,首先更新该对象,可以尽量减少冲突、 合并
•
7 、保证提交到的版本库的代码没有 BUG 以 免影响开发组 ,可以适当利用加锁机制,减 少冲突
七、 csdb 版本管理规则 •
8 、项目负责人和版本管理员负责软件的测试 版,构建测试环境 , branches 由版本管理 员进行 ( checkout )
•
9 、项目负责人和版本管理员负责发布软件的 发布版,与系统部协调构建发布环境 (export)
•
10 、版本管理员负责清理有关不需要的 branches ,tags
总结 •
subversion
•
版本控制系统
•
日常工作常用 svn 命令介绍
•
图形化客户端 tortoiseSVN 介绍
•
Subeclipse 插件的安装和使用