1、邓 钢 G,目录,配置管理基本概念,目录,Subversion的基本使用简介及举例,HTD&SPG目前的Subversion设置及使用要求,配置管理的提出及其作用,为什么要做配置管理?,配置管理基本概念,软件配置管理的基本概念:,SCM (Software Configuration Management),是在项目开发过程中标识、控制和管理软件变更的一种管理,软件配置管理的基本作用:,配置管理能够系统地处理变更,从而使得软件系统可以随时保持其完整性。配置管理又可称为“变更控制”,可以用来评估提出的变更请求,跟踪变更,并保存系统在不同时间的状态,软件配置管理的部分软件举例,CVS,ClearC
2、ase,Subversion,配置管理基本概念,基本概念(一),配置管理基本概念,档案库(Repository),即储存数据的档案库,档案库用分层的“文件-目录”文件系统树来存储数据,连接到档案库的客户能够对档案库中的数据进行读写,衍生概念:,客户端(Client),本地副本,check in,check out,基本概念(二),配置管理基本概念,分支(Branch),标记(Tag),合并(Merge),版本控制的不同模型(一),版本控制系统的核心任务是使得使用者能够合作编辑与共享数据,配置管理基本概念,文件共享模型,操作流程简述,后果:某人的心血就这么消失了-至少从该文件的最新版本中丢失了,
3、版本控制的不同模型(二),配置管理基本概念,“锁定-修改-解锁”的解决方案,操作流程简述,后果:,锁定造成了不必要的串行作业,锁定可能引起管理问题:例如忘记解锁,别人无法使用,限制太多,经常会成为别人的障碍,版本控制的不同模型(三),配置管理基本概念,“拷贝-修改-合并”的解决方案,操作流程简述,版本控制的不同模型(四),配置管理基本概念,“拷贝-修改-合并”的解决方案(续),操作流程简述(续),版本控制的不同模型(五),配置管理基本概念,“拷贝-修改-合并”的解决方案(续),Subversion和CVS即采用本解决方案(“拷贝-修改-合并”模型),项目成员可从档案库中读取个人的工作拷贝,所有
4、项目成员并行地在工作拷贝上工作,然后合并在一起形成新的版本,如果修改不重叠,则SVN(TortoiseSVN)可以自动合并。若修改重叠则会引起冲突(Conflict),此时需要手动修改,这种模型在实际上可以平滑运行,且解决冲突的时间将大大小于因锁定而等待的时间。事实上,解决任何冲突的最好办法是沟通而非依赖某个软件,Subversion的基本特点,Subversion的基本使用简介及举例,可以认为是CVS的替代品,CVS的特点是源代码空间与用户空间分离,CVS只对文件做到了跟踪,Subversion对文件和目录都实现了版本化,Subversion在提交变更集时使用的是原子操作,Subversio
5、n可对文件和目录进行增加、删除、复制和重命名,其余特点可参考相关文章,Subversion的基本程序及安装,Subversion的基本使用简介及举例,Subversion:基本文件,目前使用的版本为V1.4,TortoiseSVN:客户端程序,在不进行Repository的管理和维护时,可以仅安装这个程序。目前使用的版本为V1.5,注意可能存在的兼容性问题,当前获取来源:,ftp:/192.168.1.37/Software/SCM,http:/subversion.tigris.org,安装过程:一路回车即可,装完客户端后需要重新启动机器,官方使用手册原稿地址:http:/svnbook.r
6、ed-,Repository的建立,Subversion的基本使用简介及举例,svnadmin create /repo/dir,使用SVN的命令行方式建立,使用TortoiseSVN建立,Repository的目录察看,注意文件系统的选择(缺省为fsfs即可),Repository的察看及相关概念补充(一),Subversion的基本使用简介及举例,使用TortoiseSVN的Repo-Browser,常用的版本库访问URL方式:,file:/ 直接版本库访问(本地磁盘),http:/. 通过http协议访问,版本库已经使用Apache配置为支持该访问方式,Repository的察看及相关概
7、念补充(二),Subversion的基本使用简介及举例,Subversion中Revision的基本概念,SVN的修订号是针对整个目录树的,而不是单个文件,每一个修订号代表了一次提交后版本库整个目录树的特定状态,另一种理解是修订号N代表版本库已经经过了N次提交。例如“foo.c的修订号5”的实际意思是“在修订号5时的foo.c”,最初的操作:Check Out,Subversion的基本使用简介及举例,使用TortoiseSVN的SVN Check-out,注意SVN中常用的一些版本关键字:,HEAD:版本库中的最新版本,BASE:工作拷贝中的“原始”修订版本,事实上,SVN会在本地副本的各个
8、目录及子目录中建立相应的隐含目录,其中即存放了与BASE版本一模一样的内容,日常的工作流程(一),Subversion的基本使用简介及举例,修改文件,svn commit,再加一个用户,再次check out,两个人都对文件进行修改,用户1 commit,用户2 commit,为什么不行?,用户2 update,用户2 commit,日常的工作流程(二),Subversion的基本使用简介及举例,冲突的出现及其解决,当配置项为非文本文件呢?,使用Lock命令,使用svn:needs-lock属性,我要添加新文件了,怎么办?,svn add,其他命令简介,svn resolved,可使用svn
9、help来获取更多介绍,基本设置方法,公司目前的Subversion设置及使用要求,Repository地址:,目录树结构演示及其说明,http:/192.168.1.37/svn/Test,密码文件生成方法示例,http:/192.168.1.37/svn/Hardware,基本使用要求(一),公司目前的Subversion设置及使用要求,基本使用要求(Best Practice):,及时commit。本地代码与代码库中的代码差异越小,别人合并的难度也就越小(他们有比较大的概率能够拿到新的版本),通常情况下,使用Totorise工作的基本流程为:update-修改文件-update-comm
10、it,修改文件之前首先update。这意味着修改时的版本尽可能新,一旦发生冲突,解决它的工作量会比较小。此外,对于二进制文档,还需要注意lock的问题,基本使用要求(二),公司目前的Subversion设置及使用要求,同一功能涉及的所有代码一次commit。不要将涉及同一功能修改的代码分开commit,因为这会给日后的追踪带来麻烦,基本使用要求(Best Practice) (续):,将不同的功能单元修改分开commit。一方面,这样做能够尽早地commit,减少别人合并的难度;另一方面,由于subversion提供了回退到先前版本的能力,一旦由于某项功能修改造成问题,也很容易将那次修改的内容
11、而不是整个修改回退到正常的代码,基本使用要求(三),公司目前的Subversion设置及使用要求,写清commit log(提交日志)。写清楚为什么进行代码的修改,以及进行了什么样的修改,清楚的commit log能够帮助其他开发者在不仔细阅读代码的情况下了解修改的内容,从而极大地提高开发效率;另一方面,这些日志对于开发者自己以及整个开发团队,都是非常宝贵的财富,基本使用要求(Best Practice) (续):,先调试后提交。这将减少别人不会因为同步了中间结果引发问题,甚至发生提交冲突的可能。此外,最好每解决一个bug即提交一次,基本使用要求(四),公司目前的Subversion设置及使用要求,其余best practice留待日后添加,基本使用要求(Best Practice) (续):,在目前的权限设置下,参与调试的各成员应经常性检查其他组的代码是否有所更新并检出到本地,经常保持客户端时钟与服务器时钟的一致,通过命令“net time svnserver /set”来设置,根据当前情况,禁止将目录名称设置为中文,即必须使用英文目录名;但可以使用中文文件名,提问时间,对诸位的要求:,对SVN的使用还有什么不清楚之处?,整理自己的工作目录,立即开始上传,制作密码文件,发给焦墨,