浅谈软件配置管理工具(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  阅读(11939)  评论(1编辑  收藏  举报

导航