1、文档规则本地工作区 :work copy ,本地工作副本;主项目 :引用共用模块的新项目(工程)最新版本(HEAD revision):版本库里文件或目录的最新版本SA :SVN 服务器的管理员PRA :单个项目库的管理员,或者是项目负责人 User :普通工作人员WC :work copy ,本地工作副本1.版本控制原则SVN(或者其他版本控制软件)只是一个版本控制的辅助工具,不可能把所有的问题都自动解决掉。尤其,对于冲突这个麻烦事儿,项目成员在项目进程中要尽量通过优化流程来解决,而不是将希望寄托于软件工具来自动解决一切问题。建议的开发过程组织:1. 随行就市项目刚开始阶段,单独开发;项目稳
2、定阶段,完整开发。项目开发初期,各个项目成员负责自己的文件夹(或者模块) ,与 SVN 服务器间的更新、提交等操作只需要针对自己负责的文件夹(或者模块)就行了,他人的文件夹(或者模块)可以不必关心;项目稳定阶段,也就是每天的变更量很小了,所有项目成员与 SVN 服务器的更新、提交等操作需要针对项目的所有文件夹(或者模块) ,各个项目成员在其本地编译时本地工作区的全部项目程序(或者资料)均为最新的版本,保证项目作为整体能够顺利运行。2. 能躲就躲尽量保证一份文件只有一个项目成员在编辑。举例说明:程序员 A负责底层中文件 DBAccess.cs 的编写,如果程序员 B 的工作要求他为DBAcces
3、s.cs 增加两个方法,程序员 B 应该通知程序员 A 来增加而不是自己增加;如果此时 A 非常繁忙需要 B 自己增加,就需要 B 先更新本地的 DBAccess.cs,然后开始修改,修改完成后立即提交并通知 A 更新本地的文件,通过缩短提交间隔来减少冲突。2.基于版本控制的开发流程新建项目库(SA)初始化主干库(PRA)正常开发 (User)发行否标记tagging(PRA)分支 Branching(PRA)结束否分支开发 (User)合并结束合并(PRA)发行否定制新项目版本控制下的软件开发基本流程注意:上述的流程中没有考虑测试和审核的步骤。3.各阶段中 svn 的使用方法介绍3.1. 安
4、装后的常规设置3.1.1.中文界面的设置将 TortoiseSVN 的操作语言设置为中文,控制文件夹使用“_SVN”以便支持 A 项目。3.1.2.忽略文件为防止在提交操作时将不必要的文件上传到 SVN 服务器上,可将项目中不需要受 SVN 控制的文件和文件夹通过设置忽略选项的方式排除掉。常被忽略的文件有 _* obj *.db *.resharper* *.Load *.pdb *.bak。可以根据实际需要来修改忽略参数, 每个需要忽略的文件(文件夹)名称之间用空格作分隔符,需要忽略的文件夹只要写文件夹名称就行,例如 obj,忽略 obj 文件夹及所包含文件;_* 忽略所有 _(下划线)开头
5、的文件夹及所包含文件。注意,这个设置仅对本机有效,而且对本机的所有项目的本地工作区有效,对其他项目组成员没有影响。被忽略的文件仍可以通过“添加”命令使其受 SVN 控制。操作界面如下图,只需将忽略参数填写在“全局忽略模式”后的文本框中即可。3.1.3.配置强制注释项目负责人通过设置项目的 TortoiseSVN:logminisize 设置为 5,以便强制注释。设置方法:在项目的本地工作区文件夹上点击鼠标右键选择“属性” ,进入 Subversion 标签,选中 TortoiseSVN: logminisize,确保复选框“递归应用该属性”选中,取值设为 5,其意思是指提交的注释最短长度为五个
6、字。注意,这个设置对其他项目成员的也有效,但是对别的 SVN 客户端工具(如AnkhSVN)无效。如图:3.2. 初始化版本库初始化版本库有两种常用的方式: 3.2.1.直接“导入 Import”对要执行导入操作得项目文件夹进行如下清理:1. 把项目中不需要的文件删除。(临时文件、编译器创建的文件,比如*.obj、二进制文件等。)2. 把文件夹和子文件夹中的所有文件整理一遍。虽然你可以在导入之后再来进行重命名或删除等操作,但是还是推荐你在导入之前把你的项目整理好。在资源管理器(windows explorer)中选择项目 (本地硬盘上) 的根文件夹,单击鼠标右键,选择导入 Import命令,跳
7、出一个对话框:在这个对话框中你需要填写你要将项目导入仓库的 URL 地址(svn 必须小写)。导入信息(Important Message)是用来记录日志信息的。注意:与“忽略样式 exclude pattern”匹配的文件或文件夹不会被导入,除非选择了“包含忽略的文件”选项。按下“确定”按钮后,TortoiseSVN 就开始把整个文件夹树(包括所有文件)导入到仓库。用来做“导入 Import”操作的这个文件夹的名字不会出现在仓库中,只有文件夹中的内容会出现。注意:刚才用来做“导入 Import”操作的这个文件夹并没有处于版本控制下!要获取一份处于版本控制之下的本地工作区 副本,你需要对刚导入
8、的版本做一次“检出 Checkout”操作。3.2.2.“检出 Checkout”“提交 Commit”新建一个空文件夹作为本地工作区 的存放文件夹(建议与项目同名),在文件夹上(或者文件夹里)单击鼠标右键后在命令菜单中选择“检出Checkout”,出现操作窗口。注意:只能检出 Checkout 到一个空文件夹。把本地硬盘上的项目文件夹中的内容(不要复制项目的根文件夹)全部复制到 本地工作区 文件夹中,并对文件夹中进行清理操作(同“导入Import”操作前的清理操作)。然后选择本地工作区 文件夹单击鼠标右键跳出菜单,选择命令“提交 Commit”:提交对话框会显示每一个有修改的文件,包括新增的
9、,删除的,还有没有版本控制的。如果不想“提交 Commit”某个有变更的文件,只需取消勾选那个文件即可。相反,如果要提交某个未受版本控制的文件,只需勾选它就可以然后“提交 Commit”即可。3.3. 日常开发中的 SVN 操作3.3.0.版本号的解释SVN 系统中的版本号准确应该叫做“修订版本号”,每当版本库接受了一个提交 Commit,文件系统进入了一个新的状态,叫做一次修订(revision),每一个修订版本被赋予一个独一无二的、递增的自然数,这个自然数就是修订版本号。受控项目中任何一个受控文件/文件夹进行了修改提交 Commit 操作,项目的版本号就会提升一次,没有进行修改的文件/文件
10、夹其版本号不会发生变化。受控项目每一个装态都包含项目的所有文件/文件夹,引起该次版本号增加的即修改了的文件/ 文件夹保存新副本,没有发生修改的文件/文件夹保存引用,因此项目中的文件/文件夹可能与项目的版本号不同。3.3.1.更新(Update)工作副本把他人做的修改融合到自己的本地副本当中,这个把改动从服务器拿到本地的过程就是“ 更新 Update”。“更新 Update”操作可以针对一个文件,或几个被选择的文件,或某个文件夹中的所有文件。选择想要进行“更新Update”操作的文件和(或)文件夹,单击鼠标右键,在菜单中选择“更新Update”, 执行窗口显示正在 “更新 Update”的进度。他人做的修改会合并到自己的文件中,而自己所做的修改会被保留。如果不能合并,将会出现冲突(红色文字显示),冲突的文件图标将出现 标志。命令 “更新至版本 Update to Revision.” 可以使本地工作区 更新