GIT分支管理是一门艺术(转)

 

 英文原文:http://www.nvie.com/posts/a-successful-git-branching-model/

  原文作者:Vincent Driessen

  本文经Linux大棚博主总结精简而成。

  1

  GIT,在技术层面上,绝对是一个无中心的分布式版本控制系统,但在管理层面上,我建议你保持一个中心版本库。

  2

  我建议,一个中心版本库(我们叫它origin)至少包括两个分支,即“主分支(master)”和“开发分支(develop)”

  3

  要确保:团队成员从主分支(master)获得的都是处于可发布状态的代码,而从开发分支(develop)应该总能够获得最新开发进展的代码。

  4

  在一个团队开发协作中,我建议,要有“辅助分支”的概念。

  5

  “辅助分支”,大体包括如下几类:“管理功能开发”的分支、“帮助构建可发布代码”的分支、“可以便捷的修复发布版本关键BUG”的分支,等等。

  6

  “辅助分支”的最大特点就是“生命周期十分有限”,完成使命后即可被清除。

  7

  我建议至少还应设置三类“辅助分支”,我们称之为“Feature branches”,“Release branches”,“Hotfix branches”。

  至此,我们形成了如下这张最重要的组织组,包含了两个粗体字分支(master/develop)和三个细体字分支(feature/release/hotfixes)。

  8

  “Feature branches”,起源于develop分支,最终也会归于develop分支。

  9

  “Feature branches”常用于开发一个独立的新功能,且其最终的结局必然只有两个,其一是合并入“develop”分支,其二是被抛弃。最典型的“Fearture branches”一定是存在于团队开发者那里,而不应该是“中心版本库”中。

  10

  “Feature branches”起源于“develop”分支,实现方法是:

git checkout -b myfeature develop

  11

  “Feature branches”最终也归于“develop”分支,实现方式是:

git checkout devleopgit merge --no-ff myfeature(--no-ff,即not fast forward,其作用是:要求git merge即使在fast forward条件下也要产生一个新的merge commit)(此处,要求采用--no-ff的方式进行分支合并,其目的在于,希望保持原有“Feature branches”整个提交链的完整性)git branch -d myfeaturegit push origin develop

  12

  “Release branch”,起源于develop分支,最终归于“develop”或“master”分支。这类分支建议命名为“release-*”

  13

  “Relase branch”通常负责“短期的发布前准备工作”、“小bug的修复工作”、“版本号等元信息的准备工作”。与此同时,“develop”分支又可以承接下一个新功能的开发工作了。

  14

  “Release branch”产生新提交的最好时机是“develop”分支已经基本到达预期的状态,至少希望新功能已经完全从“Feature branches”合并到“develop”分支了。

  15

  创建“Release branches”,方法是:

git checkout -b release-1.2 develop./bump-version.sh 1.2 (这个脚本用于将代码所有涉及版本信息的地方都统一修改到1.2,另外,需要用户根据自己的项目去编写适合的bump-version.sh)git commit -a -m "Bumped version number to 1.2"

  16

  在一段短时间内,在“Release branches”上,我们可以继续修复bug。在此阶段,严禁新功能的并入,新功能应该是被合并到“develop”分支的。

  17

  经过若干bug修复后,“Release branches”上的代码已经达到可发布状态,此时,需要完成三个动作:第一是将“Release branches”合并到“master”分支,第二是一定要为master上的这个新提交打TAG(记录里程碑),第三是要将“Release branches”合并回“develop”分支。

git checkout mastergit merge --no-ff release-1.2git tag -a 1.2 (使用-u/-s/-a参数会创建tag对象,而非软tag)git checkout developgit merge --no-ff release-1.2git branch -d release-1.2

  18

  “Hotfix branches”源于“master”,归于“develop”或“master”,通常命名为“hotfix-*”

  19

  “Hotfix branches”类似于“Release branch”,但产生此分支总是非预期的关键BUG。

  20

  建议设立“Hotfix branches”的原因是:希望避免“develop分支”新功能的开发必须为BUG修复让路的情况。

  21

  建立“Hotfix branches”,方法是:

git checkout -b hotfix-1.2.1 master./bump-version.sh 1.2.1git commit -a -m "Bumpt version to 1.2.1" (然后可以开始问题修复工作)git commit -m "Fixed severe production problem" (在问题修复后,进行第二次提交)

  22

  BUG修复后,需要将“Hotfix branches”合并回“master”分支,同时也需要合并回“develop”分支,方法是:

git checkout mastergit merge --no-ff hotfix-1.2.1git tag -a 1.2.1git checkout developgit merge --no-ff hotfix-1.2.1git branch -d hotfix-1.2.1

  23

  还记得文章开始时的那张大图么,我建议你把这幅大图从这里下载下来,打印出来,贴在你写字台的墙壁上,好处不言而喻。

  over~

http://kb.cnblogs.com/page/132209/

 

时间: 2024-08-11 05:58:57

GIT分支管理是一门艺术(转)的相关文章

git学习------>Git 分支管理最佳实践

ps:本文转载于 : https://www.ibm.com/developerworks/cn/java/j-lo-git-mange/index.html Git 是目前最流行的源代码管理工具.大量的软件项目由 GitHub.Bitbucket 和 GitLab 这样的云服务平台或是私有的 Git 仓库来管理.在使用 Git 时通常会遇到的一个问题是采用何种分支管理实践,即如何管理仓库中作用不同的各类分支.和软件开发中的其他实践一样,Git 分支管理并没有普遍适用的最佳做法,而只有对每个团队

分布式版本控制Git分支管理策略及使用规范流程

Git分支管理策略 目前最流行的"版本管理系统",非Git莫属. 相比同类软件,Git有很多优点.其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便.有些传统的版本管理软件,分支操作实际上会生成一份现有代码的物理拷贝,而Git只生成一个指向当前版本(又称"快照")的指针,因此非常快捷易用. 但是,太方便了也会产生副作用.如果你不加注意,很可能会留下一个枝节蔓生.四处开放的版本库,到处都是分支,完全看不出主干发展的脉络. Vincent Dr

Git分支管理策略

如果你严肃对待编程,就必定会使用"版本管理系统"(Version Control System). 眼下最流行的"版本管理系统",非Git莫属. 相比同类软件,Git有很多优点.其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便.有些传统的版本管理软件,分支操作实际上会生成一份现有代码的物理拷贝,而Git只生成一个指向当前版本(又称"快照")的指针,因此非常快捷易用. 但是,太方便了也会产生副作用.如果你不加注意,很可能

git分支管理模型推荐

前言 正如我了解到的,很多基于SVN的分支管理,类似如下的流程: 可能存在的问题: master合并成本比较高 特性分支有开发公共功能的需求, 需要及时合并 如下是一个比较成功的分支策略和发布管理,原文链接,另外,建议大家用sourceTree进行git的分支管理,因为上面的Git Flow就是如下图所示的管理流程.看图说明一切,然后使用一下sourceTree的git flow基本就懂了. 关注点是围绕着将git作为源码版本管理的工具,另外,如果你对git很感兴趣,可以关注下作者公司(gitp

Git 远程仓库分支管理

目录 目录 速查表 关联远程代码仓库 克隆远程仓库 分支管理 创建分支 切换分支 合并分支 删除分支 解决冲突 速查表 指令 作用 git branch 查看分支 git branch newBranchName 创建分支 git checkout branchName 切换分支 giit checkout -b newBranchName 创建+切换分支 git merge branchName 合并分支到当前分支 git branch -d branchName 删除分支 关联远程代码仓库

【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流

找到一篇很详细的Git教程,真的很不错,推荐!!! GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘  . GitHub操作流程 : 第一次提交 :   方案一 : 本地创建项目根目录, 然后与远程GitHub关联, 之后的操作一样; -- 初始化git仓库 :git init ; -- 提交改变到缓存 :git commit -m 'description' ; -- 本地git仓库关联GitHub仓库 : git remote add origin git@g

Git分支本地操作详解

引言 在上一节中我们对Git的常用本地操作的命令进行详解,而本节要讲解的是Git的分支, 在讲解之前补充两点概念性的东西: 第一个: 第一节中一个读者提出的疑问,Git和SVN在版本控制中存储方式版本信息的差异. 答:Git关心文件的整体是否发生变化,而SVN则关心的是文件内容的具体差异! SVN每次记录的是有哪些文件进行了修改,以及修改了哪些行的哪些内容: 如上图,比如版本2中记录的是文件A以及文件C的变化,而版本3中仅仅记录文件C 的变化这样,以此类推:而Git并不保存这些前后变化的差异数据

github-VS2013 git 源代码管理

问题描述 VS2013 git 源代码管理 "无法将本地分支 master 发布到远程存储库 origin,因为此处已存在具有同一名称的分支.您可能需要重命名您的本地分支,然后重试." 出现了这个错误,虽然我重命名分支后成功了,但是仍然存在疑问.我想要更新master分支怎么弄?难道我每次更改代码都要新建一个分支? (我github 新手) 解决方案 同遇到过这样的问题,不知道朋友的问题是不是已经解决了,我的分析和解决方式如下,多多指教: 因为github新建项目的时候选中了初始化选项

Git详解之三:Git分支

原文链接:http://blog.jobbole.com/25877/ 原文:<Pro Git> Git 分支 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间.(伯乐在线注:如果你对Git还不了解,建议从本Git系列第一篇文章开始阅读) 有人把 Git 的分支模型称为"必杀技特性",而正是因为它,将