`
seandeng888
  • 浏览: 158107 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

配置管理工具GIT之管理模型

阅读更多

    本文结合了自己的项目经验及网上资料,再加上个人的一些体会。出于对git管理工具的热爱,特编写此文。

git管理模型

分布式但集中化,这是对git管理模型最好的阐述。模型图如下图所示:



      上图中origin是一个"中心库",当然这个中心库只是被认为是这样(因为Git是分布式的,从技术层面上来说是没有中心库的)

       每个开发者pullpushorigin,但除了中心化的push-pull关系外,每个开发者还可以从其他开发者那pull changes。比如说,对于一个比较大的新特性,在把代码提交到origin之前,很可能会安排2个或多个开发者。上图中有几个小团队:AliceBobAliceDavidClairDavid。团队成员先把代码pull到队长那里,再由队长pullorigin库。

主要分支设计

中心仓库有两个分支:masterdevelop

origin上的master分支,Git用户应该很熟悉,跟master并行的有一个develop分支



     我们把origin/master作为主要分支,源码的HEAD总是表示production-ready(可随时部署)状态。而origin/develop上的代码是为下一次的代码发布准备的。每日构建也是基于此分支。

develop分支达到了一个稳定状态并准备发布时,所有的改变都要合并到master分支,并标上版本号。这样每次与master合并都会会有新的部署发布。如下是相关命令:

$git checkout –b develop master

develop分支上进行开发工作。

$git checkout master

$git merge –no-ff develop

支持分支设计

我们的开发模型使用了一些支持分支放在masterdevelop分支的旁边,方便开发小组之间的并行开发。不像主要分支,这些分支是有时间限制的,因为他们最终都会被移除。

我们会使用到的不同的分支有:Feature branchesRelease branchesHotfix branches

每个分支都有各自的作用,并且有严格的规定,如:只能从哪个分支上去新开分支,只能合并到那个分支。

Feature branches

规定如下:

继承分支: develop
合并分支:develop
命名规范:除了master,develop,release-,hotfix-

Feature branches是用来开发新特性的(短期,远期都可以)。当开始开发新特性时,很可能不知道这个特性会出现在哪个目标版本。一旦开发完成就可以合并到develop,当然如果开发失败,就可以抛弃。

创建及完成一个 Feature branch

根据Feature branches的规定,创建命令如下:

$ git checkout -b myfeature develop

新特性完成时,可以合并到develop

$ git checkout develop

$ git merge --no-ff myfeature

$ git branch -d myfeature

$ git push origin develop

—no-ff (注:no fast foward)标签,使得每一次的合并都创建一个新的commit记录。即使这个commit只是fast-foward,这样可以避免丢失信息


Release branch

规定如下:

继承分支: develop
合并分支:develop master
命名规范:release-*

Release branch 是为新的production release准备的,可以有一些小的bug,并为发布准备一些元数据(版本号,构建日期等等)。把所有的这些工作都放到 Release branchdevelop branch就能更清晰地知道下一个版本要开发哪些特性。

develop分支合并到release分支的关键因素是:develop分支达到了release分支所要求的状态。至少所有针对该release的特性要被合并。至于那些将来会有的特性可以先放一放。然后就是为接下来即将要发布的版本分配一个版本号。

创建一个Release branch

Release branch是通过develop分支而创建。举个例子,假如1.1.5是当前的production release,然后会有一个比较大的版本发布。develop的状态已经可以发布版本了,经过商榷后,决定发布为1.2版本,所以我们创建一个release分支,并给这个分支一个新的版本号

$ git checkout -b release-1.2 develop

这个新分支可能会存在一定的时间,直到可以被合并到production branch。这段时间内,bug修补可以在这个分支上进行(而不是develop分支)。添加新特性(尤其比较大的)是不允许的。最后还是要被合并到develop,然后继续在develop分支上开发,直到下一个版本。

完成一个release branch

release branch已经准备就绪,需要做几件事。首先,release分支被合并到master分支上(每一个提交到master上的commit都是一个新版本,切记)。然后master上的commit都要添加tag,方便将来查看和回滚。最后release上所做的修改必须合并到develop分支上,保证bug已被修补。

前两个步骤:

$ git checkout master

$ git merge --no-ff release-1.2

$ git tag -a 1.2

为了把release上的改变保存到develop,我们需要合并到develop

$ git checkout develop

$ git merge --no-ff release-1.2

这个步骤可能会导致冲突,如果这样的话,解决冲突,然后再提交。

现在一切都完成了,可以把release branch干掉了。

$ git branch -d release-1.2

Hotfix branch

规定如下:

继承分支: master
合并分支:develop master
命名规范:hotfix-*

Hotfix branchRelease branch有几分相似,都是为了新的production release而准备的。比如运行过程中发现了bug,就必须快速解决,这时就可以创建一个Hotfix branch,解决完后合并到master分支上。好处是开发人员可以继续工作,有专人来负责搞定这个bug

创建Hotfix branch

Hotfix是从master分支上创建的。假如当前运行版本是1.2,然后发现有bug,但是develop还在开发中,不太稳定,这时就可以新开一个Hotfix branch,然后开始解决问题。

$ git checkout -b hotfix-1.2.1 master

解决问题,一次或几次commit

$ git commit -m "Fixed severe production problem"

完成Hotfix branch

当结束时,bugfix要被合并到master,同时也要合并到develop,保证下个版本发布时该bug已被修复。这跟release branch完成时一样。

首先更新mastertag release

$ git checkout master

$ git merge --no-ff hotfix-1.2.1

$ git tag -a 1.2.1

接下来与develop合并

$ git checkout develop

$ git merge --no-ff hotfix-1.2.1

有一个例外,就是当存在一个release branch存在时,bugfix要被合并到release而不是develop,因为release最终会被合并到develop

最后移除branch

$ git branch -d hotfix-1.2.1

总结

 

这个管理模型应该算是达到行业标准的一个模型了。在实际的开发过程中,如果不用太过于考虑项目成本及项目成员的能力水平时,这样的模型应当是首选。

  • 大小: 51.4 KB
  • 大小: 33 KB
  • 大小: 34.8 KB
0
0
分享到:
评论

相关推荐

    git仓库管理工具

    Git仓库管理工具是一款全球广泛使用的分布式版本控制系统,它在软件开发和协作中起着至关重要的作用。Git由Linus Torvalds为Linux内核开发创建,后来被广泛应用到各种项目中,无论大小。其核心特性包括高效的数据...

    git 管理工具配套

    本资源“git 管理工具配套”可能包含一系列帮助用户更好地理解和使用Git的工具和教程。 1. **Git基本操作** - **初始化仓库**: 使用`git init`命令在本地创建一个新的Git仓库。 - **添加文件**: 使用`git add ...

    版本控制工具git

    - **Git Flow**:一种常见的分支模型,包括开发分支、特性分支、发布分支和hotfix分支。 - **GitHub Flow**:简化版工作流,主要基于master分支和PR(Pull Request)。 **8. Git高级用法** - **标签(Tag)**:用于...

    Git版本控制管理 第2版.pdf.zip

    2. **分支管理**:Git的分支模型,如何创建、切换、合并和删除分支。`git merge`和`git rebase`命令的区别和适用场景。 3. **Git Flow工作流**:理解并应用git flow命令行工具,包括初始化、创建feature分支、完成...

    Git工具安装包,Git工具安装包

    7. 快照式模型:Git以文件快照的形式存储项目状态,每次提交都是对整个项目状态的一个快照,而不是只记录差异,这种设计使得版本回溯更加直观和高效。 8. 高性能:Git设计得非常快速,无论是本地操作还是与远程仓库...

    用于进行项目管理的Git安装工具包

    1. 分支管理:Git的分支模型非常强大,允许团队成员独立开发功能,然后通过合并分支来集成代码。 2. 数据安全:Git采用SHA-1哈希算法确保数据完整性,每个版本都有唯一的标识,防止数据被篡改。 3. 并行开发:多个...

    GIT客户端工具-程序员必选

    5. 强大的分支管理:Git的分支模型是其强大之处,可以轻松地创建、切换和合并分支。 TortoiseGit是Git的一个流行的Windows客户端,它提供了与Windows资源管理器集成的图形用户界面。主要特点有: 1. 直观的操作:...

    svn类型的git工具64位

    通过`git-svn`,开发者可以将Git的分支管理和本地版本控制功能与SVN的集中式模型相结合,实现两者的无缝集成。 使用`git-svn`,开发者可以: 1. **克隆SVN仓库**:`git svn clone`命令可以从SVN服务器克隆一个完整...

    Git相关工具的安装包

    Git是分布式版本控制系统,它允许开发人员...对于团队协作和项目管理,Git的分支模型特别强大,支持并行开发,而海龟Git则为非命令行用户提供了便利。通过熟练掌握这两个工具,可以极大地提高开发效率和代码管理质量。

    git 教材 progit

    3. **分支管理**:Git的分支系统是其强大之处。通过创建和合并分支(`git branch`和`git merge`),你可以并行开发不同的功能或修复错误,而不会干扰主分支。`git checkout`命令用于在不同分支之间切换。 4. **远程...

    目前国内外常见的10种配置管理工具一览

    ### 目前国内外常见的10种配置管理工具一览 配置管理工具(Configuration Management Tools,简称CM或SCM)是配置管理领域中极为重要的组成部分。它不仅承载着配置管理理论的实际应用,而且其功能的广度与深度直接...

    GitTfs源码管理器转换,适用于VS2013项目中有Git目录Tfs就无法工作的情况

    2. **配置TFS连接**:运行GitTfs命令行工具,输入你的TFS服务器地址和凭据,建立连接。 3. **克隆TFS仓库**:使用`git tfs clone`命令,指定要克隆的TFS分支。这会创建一个新的Git仓库,其中包含TFS的所有提交历史...

    Autosar配置工具链

    在AutosAR系统中,配置工具链扮演着至关重要的角色,它使得开发人员能够高效地定义、配置和管理汽车电子软件的各个组件。 AutosAR配置工具链主要由以下几个核心组件构成: 1. **基础软件(BSW)配置器**:AutosAR...

    完全学会GIT+GITHUB+GIT+SERVER的24堂课

    Git的分支模型是其强大之处,它鼓励快速迭代和并行开发。开发者可以创建新分支(`git branch <branch-name>`)进行新功能开发,然后合并到主分支(`git merge <branch-name>`)。通过`git switch`或`git checkout`...

    Git-2.10.0/TortoiseGit-2.4.0 代码管理工具

    接着安装TortoiseGit,配置好Git的路径,使其能够找到已安装的Git。 使用Git进行代码管理时,你需要掌握一些基本操作,如克隆(clone)远程仓库,添加(add)和提交(commit)更改,推送(push)本地更改到远程仓库...

    Git-2.17.0-64 for windows

    命令行工具Git Bash提供了一个类Unix的环境,使得熟悉Linux或Unix命令的开发者能无缝迁移。同时,Git GUI则为不熟悉命令行的用户提供了一个直观的界面。 Git的使用方法涵盖了很多方面,从基本的克隆、添加、提交、...

    超级强大的配置管理培训教材

    CMMI(Capability Maturity Model Integration)是一种评估和改进组织过程能力的模型,其中配置管理是关键实践之一。本教材将结合CMMI框架,讲解如何将配置管理实践与成熟度模型相结合,以实现更高效、更规范的开发...

    Git(Win7 64位)+TortoiseGit2.4

    2. 分支管理:Git的分支模型非常强大,团队成员可以在各自的分支上独立工作,然后通过合并请求将代码合并回主分支。 3. 协作便利:通过远程仓库,团队成员可以轻松地分享和同步代码,查看其他人的修改。 4. 冲突解决...

    CMMI3-配置管理过程-培训资料

    CMMI (Capability Maturity Model Integration) 是一种用于改进组织的过程能力的模型,其中配置管理(CM)是关键过程域之一。CMMI针对配置管理提出了以下目标和实践: 1. **建立基线**(SG1):识别配置项、建立配置...

    中文软件配置管理讲义

    常用的版本管理工具有Git、SVN等,它们帮助团队协作,避免冲突并保持代码一致性。 6. **配置审核** 配置审核是定期检查配置项是否符合预定标准和要求的过程,确保软件产品的质量和合规性。这通常由独立的审计人员...

Global site tag (gtag.js) - Google Analytics