浅谈软件配置管理工具(github & SVN)
1 配置管理名词定义
1.1 配置项
软件生存周期各个阶段活动的产物经审批后即可称之为软件配置项。
软件配置项包括:
①与合同、过程、计划和产品有关的文档和资料;
③相关产品,包括软件工具、库内的可重用软件、外购软件及顾客提供的软件等。
1.2 配置项标识
配置标识是定义各类配置项、建立各种基线、描述相关软件配置及其文档的过程。
配置标识是指为了方便对软件配置的各个片段进行管理,必须对每一个配置项进行标识。其原则为:
(1)用易于理解和推测的方式定义文件的标识;
(2)当需要修改时,提供进行修改和跟踪它们的方法;
(3)为了便于控制与管理,要隐含如下内容:配置项内容、版本、完成时间等。
1.3 版本
软件版本一般只在软件开发公司内部运行,不对外公开。主要是开发者自己对产品进行测试,检查产品是否存在缺陷、错误,验证产品功能与说明书、用户手册是否一致。Alpha版本的产品仍然需要完整的功能测试,而其功能亦未完善,但是可以满足一般需求。因为它是整个软件释出周期中的第一个主要阶段,所以它的名称是“Alpha”,希腊字母中的第一个字母。
1.4 基线
在计算机术语中,基线是项目储存库中每个工件版本在特定时期的一个“快照”。它提供一个正式标准,随后的工作基于此标准,并且只有经过授权后才能变更这个标准。建立一个初始基线后,以后每次对其进行的变更都将记录为一个差值,直到建成下一个基线。
1.5 配置库
存放配置项的数据库,常用两种形式:按配置项类型分类建库和按任务建库。
一般包括以下几种:
开发库:用于存放项目期间处于开发状态的相关文档和代码。以及存放项目组工作期间的相关沟通记录等
受控库:用于存放经过验证后的产品(包括基线产品);建立测试区,用于存放开发工作结束后需要进入测试的配置项,以及为变更实施提供工作空间。
产品库:存放发布后的产品。
2 SVN操作说明
2.1 相关操作:
(1)add:将文件或目录加入SVN库。
注意:如果添加目录的话,目录下的所有文件会同时被添加
(2)check out:将SVN服务器上的项目文件下载到本地目录
注意:在checkout 时有一个检出深度,有如下选项:
①全递归(默认选择):检出完整的目录树,包含所有的文件或子目录。
②直接节点,包含目录: 检出目录,包含其中的文件或子目录,但是不递归展开子目录。
③仅文件子节点:检出指定目录,包含所有文件,但是不检出任何子目录。
④.仅此项:只检出目录。不包含其中的文件或子目录。
(3)update:更新工作副本使其成为版本库中的最新版本
(4)commit:将在工作副本做的修改进行提交
注意:为了以后能更清晰的看到自己所做的每一次更改的原因,在提交时应该写上注释
(5)delete:删除文件或目录
(6)revert:撤销本地所有未提交的修改
注意:还没有执行commit操作之前执行此命令才可以,否则无效
(7)rename:修改文件名
(8)branch:建立分枝
3 GitHub操作说明
3.1 GitHub的基本简介:
Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中。目前,包括Rubinius、Merb和Bitcoin在内的很多知名项目都使用了Git。Git同样可以被诸如Capistrano和Vlad the Deployer这样的部署工具所使用。
3.2 GitHub的基本操作:
(1)注册账号以及创建仓库:
注册 GitHub账号:http:// github.com
(2)安装客户端msysgit:
github是服务端,还需要一个git客户端msysgit,这个只是提供了git的核心功能。装完msysgit 后右键鼠标会多出一些选项来,在本地仓库里右键选择 git init here ,会多出来一个.git 文件夹,这就表示本地git 创建成功。
(3)配置SSH :
SSH 是一种连接方式,一方面免于总是在连接时输入用户和密码,另一方面增加安全性。
SSH是两段很长的字符,一段是锁,另一段是钥匙。
1)第一步,生成密钥和锁
2)第二部,将锁放置到github的账户里
C:/users/用户名(windows用户)/.ssh/文件夹中,用记事本打开其中的id_rsa.pub文件,全部内容复制。回到https://github.com ,进入Account Settings,左边选择SSH Keys ,Add SSH Key,title 随便填,粘贴key。
3)第三步,测试是否成功
为了验证是否成功,在git bash下输入:ssh-T git@github.com
若是第一次的会提示是否continue,输入yes 会看到:
You’ve successfully authenticated,but GitHub does not provide shell access.
此即表示已经成功连上github
(4)设置用户信息:
Global user,name”your name ”
Global user.email”your email”
(5)工作区和暂存区:
工作区(working directory):即在电脑里能看到的目录
版本库(repository):工作区有一个隐藏目录.git,这个是git 的版本库。
暂存区(stage 或者 index):存于git 的版本库里。
(6)远程仓库:
1)创建远程仓库
在github 首页,点击页面右上角“new repository”;填写项目信息(project name和description );点击“create repository”,在github上创建一个仓库。
2)在本地创建一个相同的仓库
在电脑上任意一个文件夹,新建一个目录,目录名与在github上所建库的名字相同。然后右击文件夹,在弹出菜单中选择git bash,弹出命令行窗口,输入:git init,此时git 会在这个文件夹下创建一个隐藏目录,此即为本地库。
3)绑定本地库和远程库
将本地库传到github 上去,后添加远程地址:
git remote add origin git@github.com:yourname/yourrepo.git
添加完之后进入.git,打开config,这里会多出一个remote“origin”内容,此即为刚刚添加的远程地址,亦可直接修改config来配置远程地址。
4)提交、上传
$ git add //添加文件
$ git commit-m’first commit’//提交更新,并注释信息’first commit’
$ git push origin master //git push 命令会将本地仓库推送到远程服务器。
5)从远程库克隆
登陆GitHub,创建一个新的仓库,名为gittest;
勾选Initialize this repository with a README,自动创建一个 README.md文件;
用命令git clone 克隆一个本地库:$git clone git@github.com:yourname/gittest.git
(7)分支管理
1)创建和合并分支
查看分支:git branch
创建分支:git branch<name>
切换分支:git checkout<name>
创建+切换分支:git checkout-b<name>
合并某分支到当前分支:git merge<name>
删除分支:git branch-d<name>
2)分支策略(基本原则)
一是 master分支是非常稳定的,其仅用来发布新版本;
二是dev分支是不稳定的。
(8)协作开发
第一步:进行Fork
第二步:进行克隆:利用右侧边栏中的URL对repo进行克隆
第三步:添加上游远程仓库:Git remote add upstream
第四步:检查主分支
第五步:提交
第六步:推送
第七部:创建pull request
4 GIT与SVN比较
1.GIT是分布式的,SVN不是:
SVN属于集中式的版本控制系统,而GIT是分布式的。对于SVN来说,每个版本库有唯一的URL,每个用户都从这个地址获得数据的更新,提交时必须授权以及网络的连接。而在GIT中每个克隆的版本库是平等的,可以从任何一个版本库的克隆来创建自己的版本库,GIT的提交完全在本地完成,无需授权,并且可以脱离网络
2.GIT把内容按元数据方式存储,而SVN是按文件
所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的 体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分 支,版本记录等
3.GIT分支和SVN的分支不同:
SVN和GIT的分支不同分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。然而,处理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。
4.GIT没有一个全局的版本号,而SVN有:
SVN的版本号实际是任何一个相应时间的源代码快照,SVN是全局版本号,GIT是全球版本号。
5. SVN的工作区和版本库是截然分开的,而GIT的:
工作区和版本库是如影随形的。SVN的企业级部署中,版本库在服务器上,工作区是一份版本库在某个历史状态下的快照。GIT的根目录有一个.git的子目录,这个子目录就是版本库本身。
5 配置库结构设计
推荐的典型的配置库结构:
开发库:项目成员的工作环境,保存正处于开发/变更的工作产品(文档/源代码)。开发库内的工作产品处于存档控制/版本控制之下,其信息可能进行频繁的修改
受控库:保存开发过程中某个阶段工作结束时释放的阶段产品,即配置项的基准版本。受控库的配置项处于基准控制下
产品库:保存对内/对外发布的产品,等待外部测试组测试,或者等待用户安装和验收,产品库的配置项处于基准控制下
在现实操作中,开发库一般分为开发库(DevelopLibrary)和管理库(ManagementLibrary),受控库一般称为基准库(BaselineLibrary),产品库一般称为发布库(ReleaseLibrary)/产品库(ProductLibrary),他们的具体组成和作用如下:
【管理库(ManagementLibrary)】:存放各种管理类文档
01.项目计划(ProjectPlaning):存放计划类相关文档如项目管理计划、进度计划、评审计划等
02.项目管理(ProjectManagement):存放项目度量、管理类报告如周报、月报等
01.软件估算(SoftwareEstimate):存放软件估算表等
02.周报(WeeklyReport):存放项目周报
03.里程碑报告(MiletoneReport):存放项目里程碑报告
04.决策分析报告(DecisionAnalysisReport):存放项目决策分析报告
05.外部报告(ExternalReport):存放针对外部人员(如客户)的报告
03.质量保证(QualityAssurance):存放质量保证计划等质量保证相关内容
01.周报(QAWeeklyReport):存放项目QA周报
02.审计记录(QAAuditRecord):存放QA审计记录
04.配置管理(ConfigurationManagement):存放配置管理计划等配置管理相关内容
01.配置周报(CMWeeklyReport):存放配置管理周报
02.基准申请(BaselineRequest):存放各种基准建立申请
03.变更申请(ChangeRequest):存放各种基准变更申请
05.评审管理(ReviewManagement):存放评审管理相关内容
01.评审通知(ReviewNotify):存放评审通知
02.评审记录(ReviewRecord):存放评审记录
03.评审分析(ReviewAnalyse):存放评审结果分析
06.项目培训(ProjectTraining):存放项目培训相关内容
01.培训教材(TrainingMaterial):存放各类培训教材
02.培训记录(TrainingRecord):存放培训记录、签到表等
07.项目总结(ProjectSummary):存放项目总结相关内容
01.里程碑总结(MileoneSummary):存放项目里程碑总结
02.结项总结(ClosingSummary):存放项目结项总结
03.个人总结(PersonalSummary):存放项目成员个人总结(结项后)
08.缺陷预防(DefectPrevention):
01.检查表(CheckList):存放各类检查表
02.检查结果(CheckResult):存放各类检查表的检查结果
09.会议记录(MeetingRecord):存放各类会议记录
【开发库(DevelopLibrary)】:存放项目开发过程中的工作产品
01.需求分析(RequirementAnalyse):存放需求分析文档、原型页面等
02.系统设计(SystemDesign):存放系统设计文档等
03.系统测试(SystemTest):存放系统测试计划、方案、用例等
04.概要设计(PreliminaryDesign):存放概要设计文档等
05.集成测试(IntegrationTest):存放集成测试计划、方案、用例等
06.详细设计(DetailDesign):存放详细设计文档等
07.单元测试(UnitTest):存放单元测试设计、结果等
08.系统代码(SystemCode):存放系统代码
09.确认测试(AssuranceTest):存放确认测试计划、用例、结果等
10.用户手册(UserManuals):存放用户手册等
11.支持工具(SupportTools):存放项目使用到的支持工具,如PowerDesigner、SQLManager等
12.外部产品(ExternalProducts):存放项目使用到的外部组件,如extjs等
13.其它(Other):存放开发过程中的其他工作产品
【基准库(BaselineLibrary)】:存放基准化的工作产品,内容可参照开发库中的说明
01.项目计划(ProjectPlaning):存放基准化的计划类相关文档如项目管理计划、进度计划、评审计划等
02.需求分析(RequirementAnalyse):存放基准化的需求分析文档、原型页面等
03.系统设计(SystemDesign):存放基准化的系统设计文档等
04.系统测试(SystemTest):存放基准化的系统测试计划、方案、用例等
05.概要设计(PreliminaryDesign):存放基准化的概要设计文档等
06.集成测试(IntegrationTest):存放基准化的集成测试计划、方案、用例等
07.详细设计(DetailDesign):存放基准化的详细设计文档等
08.单元测试(UnitTest):存放基准化的单元测试设计、结果等
09.系统代码(SystemCode):存放基准化的系统代码
10.确认测试(AssuranceTest):存放基准化的确认测试计划、用例、结果等
11.用户手册(UserManuals):存放基准化的用户手册等
12.支持工具(SupportTools):存放基准化的项目使用到的支持工具,如PowerDesigner、SQLManager等
13.外部产品(ExternalProducts):存放基准化的项目使用到的外部组件,如extjs等
【发布库(ReleaseLibrary)】:存放待发布/已发布的产品
01.内部发布(InternalRelease):存放待发布/已发布发给内部客户(一般为测试部门)的工作产品
02.外部发布(ExternalRelease):存放待发布/已发布发布给外部客户(一般为合同方/最终用户)的工作产品
posted on 2016-03-11 09:38 CuriousZero 阅读(11768) 评论(1) 编辑 收藏 举报