一个成功的Git分支模型

  • 时间:
  • 浏览:0

完会,修复bug并使用四个 多多机会多个单独的commit提交。

$ git checkout -b myfeature develop

Switch to a new branch “myfeature”

从技术淬硬层 来说,什么分支完会 都会“特殊”。分支按照亲戚大伙对其的使用辦法 进行分类。技术淬硬层 它们都一样是平常的Git分支。

$ git checkout master

Switched to branch ‘master’

$ git merge –no-ff release-1.2 Merge made by recursive.

分支命名约定:release-*

创建新分支并转到该分支以前,亲戚大伙设定版本号。这里的bump-version.sh是四个 多多虚构的shell脚本,它修改完会 本地工作区的文件以体现新的版本号。(当然这也还不不 手动完成——这里可是我说要有完会 文件变更)接着,提交新版本号。

前两步在Git中的操作:

提醒:你机会一起也会我应该 用 -s 机会 -u 来对标签进行签名。

上述代码中的–no-ff标记会使合并永远创建四个 多多新的commit对象,即使该合不不 以fast-forward的辦法 进行。没有做还不不 处里丢失形态学 分支居于的历史信息,一起不不 清晰的展现一组commit一起构成四个 多多形态学 。比较下面的图:

在第2张图中,机会无法一眼从Git历史中想看 什么commit对象构成了四个 多多形态学 ——你还不不 阅读日志以获得该信息。在完会 情况汇报下,回退(revert)整个形态学 (一组commit)就会比较麻烦,而机会使用了–no-diff就会简单太大。

现在工作才算真正完成了,最后一步是删除发布分支,机会亲戚大伙已不再还不不 它:

本文中我会展示有一种开发模型,一年前该模型就机会被我用在所有的项目中(包括工作中的项目和私有项目),结果是非常成功的。我早就想为此写点东西,可直到现在才有时间。本文不不讲述任何项目的细节,只会涉及到分支策略和发布管理。

最后,删除临时的热补丁分支:

亲戚大伙会用到的分支有这几类:

还不不 合并回:develop

上述偏离 分支都会特定的用途,它们各自 所有关于源自什么分支、合并回什么分支,都会严格的规定。稍后亲戚大伙逐个进行介绍。

git-branch-4

$ git commit -m “Fixed severe production problem”

[hotfix-1.2.1 abbe5d6] Fixed severe production problem

5 files changed, 32 insertions(+), 17 deletions(-)

接着,将修复代码合并到develop:

发布分支从develop分支创建。类式于,假设1.1.5是当前的产品版本,一起亲戚大伙即将发布下个版本。develop分支的情况汇报机会是准备好“下一版本”发布了,亲戚大伙也决定下个版本是1.2(而都会1.1.6机会2.0)。完会亲戚大伙创建发布分支,完会为其赋予四个 多多能体现新版本号的名称:

机会的分支来源:master

热补丁分支从master分支创建。类式于,假设1.2是当前正在被使用的产品版本,机会四个 多多严重的bug,产品引起了太大大问题。一起,develop分支还居于不稳定情况汇报,无法发布新的版本。这时亲戚大伙还不不 创建四个 多多热补丁分支,并在该分支上修复大问题:

简单介绍下工具后,让亲戚大伙来看开发模型。我讲介绍的模型本质上可是我一组步骤,每个团队成员都还不不 遵循什么步骤以形成四个 多多可靠管理的软件开发过程。

紧接着主要分支master和develop,亲戚大伙的开发模型使用多种支持性分支来帮助团队成员间实现并行开发、追踪产品形态学 、准备产品版本发布、以及快速修复产品大问题。与主要分支不同的是,什么分支的寿命是有限的,它们最终都会被删除。

新的发布分支机会居于一段时间,直到该版本明确对外交付。这段时间内,该分支上机会会有完会 bug的修复(而都会在develop分支上)。在该分支上上加新形态学 是严格禁止的。新形态学 还不不 合并到develop分支,完会在等待下四个 多多版本发布。

git-branch-6

首先,更新master分支并打上标签。

当develop分支上的源码到达四个 多多稳定的情况汇报时,就还不不 发布版本。所有develop上的变更都应该以有一种辦法 合并回master分支,完会使用发布版本号打上标签。稍后亲戚大伙会讨论具体操作细节。

$ git checkout master

Switched to branch ‘master’

$ git merge –no-ff hotfix-1.2.1 Merge made by recursive.

$ git commit -a -m “Bumped version number to 1.2” [release-1.2 74d9424] Bumped version number to 1.2

发布分支为准备新的产品版本发布做支持。它允许你在最后时刻检查所有的细节。此外,它还允许你修复小bug以及准备版本发布的元数据(类式于版本号,构建日期等等)。在发布分支做什么事情以前,develop分支就会显得比较干净,也方便为下一大版本发布接受形态学 。

从技术上来说,这仅仅是Alice定义四个 多多Git remote,名字为bob,指向Bob的仓库,反过来也一样。

$ git branch -d hotfix-1.2.1

Deleted branch hotfix-1.2.1 (was abbe5d6).

形态学 分支(有时也被称作topic分支)是用来为下一发布版本开发新形态学 。当刚开始英语 英语 开发四个 多多形态学 的以前,该形态学 会成为哪个发布版本的一偏离 ,往往还真不知道。形态学 分支的重点是,假如形态学 还在开发,该分支就会经常居于,不过它最终会被合并回develop分支(将该形态学 加入到发布版本中),机会被丢弃(机会试验的结果令人失望)。

这里还有个例外情况汇报,机会完会 以前有发布分支居于,热补丁分支的变更则应该合并至发布分支,而都会develop。将热补丁合并到发布分支,也意味分析着当发布分支刚开始英语 英语 的以前,变更最终会被合并到develop。(机会develop上的开发工作急需热补丁并无法在等待发布分支完成,这时你也机会还不不 安全地将热补丁合并到develop分支。)

git-branch-3

亲戚大伙认为origin/develop分支上的HEAD源码反映了开发过程中最新的提交变更。没有人会称之为“集成分支”。该分支是自动化每日构建的代码源。

现在版本发布完成了,完会为未来的查阅提供了标签。

还不不 合并回:develop和master

git-branch-5

修复完成后,热补丁分支还不不 合并回master,但一起它还还不不 被合并回develop,可是我相关的修复代码才会一起被所含在下个版本中。这与亲戚大伙完成发布分支很类式于。

git checkout develop

Switch to branch ‘develop’

$ git merge –no-ff myfeature Updating ea1b82a..05e9557

使用热补丁分支的主要作用是(develop分支上的)团队成员还不不 继续工作,而另外的人还不不 在热补丁分支上进行快速的产品bug修复。

分支命名约定:hotfix-*

完成的形态学 应该被合并回develop分支以将形态学 加入到下四个 多多发布版本中:

刚开始英语 英语 开发新形态学 的以前,从develop分支创建形态学 分支。

每个开发者都对origin做push和pull操作。不过除了完会 中心化的push-pull关系外,每个开发者还不不 从完会 开发者机会小组处pull变更。类式于,机会四个 多多或更多的开发者一起开发四个 多多大的形态学 ,在往origin永久性的push工作代码以前,亲戚大伙之间还不不 执行完会 去中心化的操作。在上图中,分别有Alice和Bob、Alice和David、Clair和David什么小组。

在完会 分支模型中亲戚大伙使用的,且被证实工作得很好的仓库配置,其核心是四个 多多中心“真理”仓库。注意没有该仓库才被认为是中心库(机会Git是DVCS [分布式版本控制系统],在技术层面没有中心库完会 东西)。以前亲戚大伙用origin指代该仓库,机会大多数Git用户都熟悉完会 名称。

本文使用Git作为所有源码的版本控制工具。

完会,每次有变化被合并到master分支时,根据定义这可是我一次新的产品版本发布。亲戚大伙趋向于严格遵守该规范,太大理论上来说,每次master有提交时,亲戚大伙还不不 使用四个 多多Git钩子(hook)脚可是我自动构建并部署软件至产品环境服务器。

为了能保留发布分支上的变更,亲戚大伙还还不不 将分支合并回develop。在Git中:

本文来自云栖社区相互相互合作伙伴“Linux中国”

分支命令约定:任何除master, develop, release-*, 或 hotfix-*以外的名称

完会 操作机会会意味分析合并冲突(机会性还很大,机会亲戚大伙改变了版本号)。机会发现,则修复之并提交。

还不不 合并回:develop和master

提醒:你机会一起也会我应该 用 -s 机会 -u 来对标签进行签名。

简单及易重复性带来的好处可是我,分支及合并变得不再可怕。版本控制工具本该帮助亲戚大伙方便的进行和分支及合并操作。

$ git branch -d release-1.2

Deleted branch release-1.2 (was ff452fe).

但有了Git,类式于于事情就变得非常简单,分支及合并甚至被认为那个她 日常版本控制操作的核心之一。类式于,在CVS/Subversion的书中,分支及合并往往在底下的章节才被介绍(针对高级用户),但在每一本Git的书中,该内容机会在前3章中介绍(基础)。

每个Git用于都应该熟悉origin上的master分支。与master分支平行居于的,是另外四个 多多名为develop的分支。

随便说说完会 分支模型中没有什么很重新鲜的东西,但本文起始处的“全景图”事实上在亲戚大伙的项目中起到了非常大的作用。它帮助建立了优雅的,易理解的概念模型,使得团队成员不不 快速建立并理解四个 多多公用的分支和发布过程。

$ git checkout develop

Switched to branch ‘develop’

$ git merge –no-ff hotfix-1.2.1 Merge made by recursive.

正是在发布分支创建的以前,对应的版本发布才获得四个 多多版本号——没有更早。在该时刻以前,develop分支反映的是“下一版本”的相关变更,但真不知道这“下一版本”到底会成为0.3还是1.0,直到发布分支被创建。版本号是在发布分支创建时,基于项目版本号规则取舍的。

可惜的是,我不能自己找到辦法 让–no-diff成为默认的git merge行为参数,但随便说说应该没有做。

$ git checkout -b releases-1.2 develop

Switched to a new branch “release-1.2”

$ ./bump-version.sh 1.2 Files modified successfully. version bumped to 1.2.

形态学 分支往往只居于于开发者的仓库中,而不不再次再次出现在origin。

$ git commit -a -m “Bumped version number to 1.2.1″ [hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1

是的,没有做会造成完会 (空的)commit对象,但没有做是利大于弊的。

git-branch-2

此开发模型的核心主要受现有的模型启发。中心仓库所含了四个 多多主要分支,完会 个多多分支的寿命是无限的:

 原文发布时间为:2013-10-07

git-branch-1

$ git checkout develop

Switched to branch ‘develop’

$ git merge –no-ff release-1.2 Merge made by recursive.

机会的分支来源:develop

从develop分支创建发布分支的时间通常是develop分支(差太大)能反映新版本所期望情况汇报的以前。为宜说,这是以前版本发布所计划的形态学 都机会合并回了develop分支。而未来其它版本发布计划的形态学 则不应该合并,它们还不不 等到当前的版本分支创建好以前不不 合并。

$ git checkout -b hotfix-1.2.1 master

Switched to a new branch “hotfix-1.2.1″

$ ./bump-version.sh 1.2.1 Files modified successfully, version bumped to 1.2.1.

$ git branch -d myfeature Deleted branch myfeature (was 05e9557).

机会的分支来源:develop

不须忘了在创建热补丁分以前设定四个 多多新的版本号!

当发布分支达到四个 多多还不不 正式发布的情况汇报时,亲戚大伙就还不不 执行完会 操作。首先,将发布分支合并至master(记住,亲戚大伙以前定义master分支上的每四个 多多commit都对应四个 多多新版本)。接着,master分支上的commit还不不 被打上标签(tag),以方便将来寻找历史版本。最后,发布分支上的变更还不不 合并回develop,可是我将来的版本不不 所含相关的bug修复。

要全面了解Git与其它集中式版本控制系统相比的优劣,还不不 参考完会 页面。这方面的争论可谓是硝烟弥漫。作为四个 多多开发者,所有什么工具中我最钟情于Git。Git的的确确改变了亲戚大伙考虑合并及分支的辦法 。在我以前居于的经典CVS/Subversion世界中,合并/分支经常被认为是很重可怕的事情(“小心合并冲突,丫会恶心到你”),完会你只应偶尔干完会 事情。

热补丁分支和发布分支十分类式于,它的目的也是发布四个 多多新的产品版本,尽管是都没有计划中的版本发布。当产品版本发现未预期的大问题的以前,就还不不 理解着手处里,完会 以前就要用到热补丁分支。当产品版本的重大bug还不不 立即处里的以前,亲戚大伙从对应版本的标签创建出四个 多多热补丁分支。