Git基础06:介绍一个成功的 Git 分支模型

  • 时间:
  • 浏览:5
  • 来源:神彩IOS下载_彩神IOS下载官方

23

2345678

Switched to a new branch "hotfix-1.2.1"$ ./bump-version.sh 1.2.1Files modified successfully, version bumped to 1.2.1.$ git commit -a -m "Bumped version number to 1.2.1"[hotfix-1.2.1 41e61bb] Bumped version number to 1.2.11 files changed, 1 insertions(+), 1 deletions(-)

尽管你你这个 分支模型那末任何震撼的新东西, 文章开头的图表在亲戚朋友的项目中表现出惊人的实用性。它形成了一有一个 优雅的思维模型,易于领悟并使团队成员发展出对分支和发布过程的同去理解。

这里提供一份高质量PDF格式图表。去吧,把它挂载墙上以便能随时快速参考。

更新:但会 村里人 需要: 这是主图表的gitflow-model.src.pdf。

2015.08.19更新:主图表也都不都还可否 到这下载。

当develop分支的源码到达了一有一个 稳定状况待发布,所有的代码变更需要以两种最好的法律法律依据合并到master分支,但会 标记一有一个 版本号。怎样才能操作将在稍后完整介绍。

统统,每次变更都合并到了master,这已经 新产品的定义。在你你这个 点,亲戚朋友倾向于严格执行你你这个 点,从而,理论上,每当对master有一有一个 提交操作,亲戚朋友就都不都还可否 使用Git钩子脚另一有一个 自动构建但会 发布软件到生产服务器。

Switched to branch 'develop'$ git merge --no-ff hotfix-1.2.1Merge made by recursive.(Summary of changes)

Switched to a new branch "release-1.2"$ ./bump-version.sh 1.2Files modified successfully, version bumped to 1.2.$ git commit -a -m "Bumped version number to 1.2"[release-1.2 74d9424] Bumped version number to 1.21 files changed, 1 insertions(+), 1 deletions(-)

Switched to branch 'develop'$ git merge --no-ff myfeatureUpdating ea1b82a..05e9557(Summary of changes)$ git branch -d myfeatureDeleted branch myfeature (was 05e9557).$ git push origin develop

创建新分支无需,切换到该分支,加上版本号。这里,bump-version.sh 是一有一个 虚构的shell脚本,它都不都还可否 qq克隆好友 你你这个 文件来反映新的版本(这当然都不都还可否 手动改变–目的已经 修改你你这个 文件)。但会 版本号被提交。

你你这个 新分支但会 会存在一段时间,直到该发行版到达它的预定目标。在此期间,bug的修复但会 被提交到该分支上(而完整都是提交到develop分支上)。在这里严格禁止增加大的新features。亲戚朋友需要合并到develop分支上,但会 等待的图片 下一次大的发行版。

发行版现在但会 完成,为无需引用打上标签。

修订:你但会 也想使用-s或-u 参数来标记你的标签。

完成一有一个 bugfix无需,需要把bugfix合并到master和develop分支去,另一有一个 就都不都还可否 保证修复的你你这个 bug也中有 到下一有一个 发行版中。你你这个 点和完成release分支很类似。

首先,更新master并对release打上tag:

为了是修改保持在release分支上,亲戚朋友需要合并哪些地方地方到develop分支上去,在Git上:

对于Git与你你这个 集中式代码管理工具相比的优缺点的全面讨论,请参见这里。另一有一个 的争论总爱喋喋不休。作为一有一个 开发者,与现今的你你这个 开发工具相比较,我更喜欢Git。Git真得改变了开发者对于合并和分支的思考。我另一有一个 使用经典的CVS/Subversion,然而每次的合并/分支和你你这个 行为总给你担惊受怕(“小心合并里的冲突,亲戚朋友说要命!”)。

但会 对于Git来说,哪些地方地方行为非常简单和搞笑,它们被认为是日常工作中的核心要素。类似,在统统CVS/Subversion书里,分支与合并总爱在后边的章节中被讨论(对于高级用户使用),然而在每个Git书中,在第3章就但会 完整中有 了(作为基础)。

简单和重复的行态带来的结果是:分支与合从不再是哪些地方都不都还可否 害怕的东西。分支/合并被认为对于版本管理工具比你你这个 功能更重要。

关于工具,不再多说,让亲戚朋友直接看开发模型吧。你你这个 模型并完整都是如下模型:在管理软件开发进度方面,面对每个开发过程,每个队员需要按一定次序开发。

2345

2345

[hotfix-1.2.1 abbe5d6] Fixed severe production problem5 files changed, 32 insertions(+), 17 deletions(-)

规则的一有一个 例外是:但会 一有一个 release分支但会 存在,那末应该把hotfix合并到你你这个 release分支,而完整都是合并到develop分支。当release分支完成后, 将bugfix分支合并回release分支也会使得bugfix被合并到develop分支。(但会 在develop分支的工作急需你你这个 bugfix,等非要release分支的完成,那你也都不都还可否 把bugfix合并到develop分支)

最后,删除临时段支:

Switched to branch 'develop'$ git merge --no-ff release-1.2Merge made by recursive.(Summary of changes)

你你这个 步骤但会 会原因合并冲突(但会 但会 改变版本号更是那末)。但会 是另一有一个 ,修复它但会 提交。

现在亲戚朋友真正的完成了,你你这个 release分支将被删除,但会 亲戚朋友不再需要它了。

2

开始英语 英语 一项功能的开发工作时,基于develop创建分支。

修订:你但会 也想使用-s或-u 参数来标记你的标签。

下一步,把bugfix加上到develop分支中:

完成的功能都不都还可否 合并进develop分支,以明确加入到未来的发布:

Switched to branch 'master'$ git merge --no-ff release-1.2Merge made by recursive.(Summary of changes)$ git tag -a 1.2

对于你你这个 分支模型,亲戚朋友设置了一有一个 版本库,它运转良好,这是一有一个 ”事实上” 版本库。不过请注意,你你这个 版本库已经 被认为是中心版本库(但会 Git是一有一个 分布式版本管理系统,从技术上来讲,并那末一有一个 中心版本库)。亲戚朋友将把你你这个 版本库称为原始库,你你这个 名字对所有的Git用户来说都很容易理解。



每个开发者都对origin库拉代码和提交代码。但会 除了集中式的存取代码关系,每个开发者也都不都还可否 从子团队的你你这个 队友那里获得代码版本变更。类似,对于有一个 或多个开发者同去完成的大版本变更,为了处置过早地向origin库提交工作内容,你你这个 机制就变得非常有用。在上述途中,有如下子团队:Alice和Bob,Alice和David,Clair和David。

从技术上将,这原因,Alice创建了一有一个 Git的远程节点,而对于Bob,该节点指向了Bob的版本库,反之亦然。

Release分支是从develop分支创建的。类似,当前产品的发行版本号为1.1.5,同事亲戚朋友有一有一个 大的版本即将发行。develop 分支但会 为下次发行做好了准备,亲戚朋友得决定下一有一个 版本是1.2(而完整都是1.1.6但会 2.0)。统统亲戚朋友将Release分支分离出来,给一有一个 无需都还可否 反映新版本号的分支名。

每两种分支有一有一个 特定目的,但会 受限于严格到规则,比如:都不都还可否 用哪些地方分支作为源分支,哪些地方分支能作为合并目标。亲戚朋友马上将进行演练。

从技术深度来看,哪些地方地方分支绝完整都是特殊分支。分支的类型基于亲戚朋友使用的最好的法律法律依据来进行分类。它们理所当然是普通的Git分支。

每个Git用户完整都是熟悉原始的master分支。与master分支并行的另一有一个 分支,亲戚朋友称之为develop分支。

亲戚朋友把原始库/master库认作为主分支,HEAD的源代码存在于此版本中,但会 随时完整都是一有一个 发展对象生产状况。

234567

当一有一个 release分支准备好成为一有一个 真正的发行版的无需,有你你这个 工作需要完成。首先,release分支要合并到master上(但会 每一次提交到master上的完整都是一有一个 新定义的发行版,记住)。但会 ,提交到master上需要打一有一个 标签,以便无需更加方便的引用你你这个 历史版本。最后,在release分支上的修改需要合并到develop分支上,以便未来发行版也中有 哪些地方地方bugs的修复。

在Git中的前两步是:

23456

2

Switched to a new branch "myfeature"

亲戚朋友的开发模型使用了各种辅助性分支,哪些地方地方分支与关键分支(master和develop)同去,用来支持团队成员们并行开发,使得易于追踪功能,协助生产发布环境准备,以及快速修复实时在线问题报告 报告 。与关键分支不同,哪些地方地方分支总爱有一有一个 有限的生命期,但会 亲戚朋友最终会被移除。

亲戚朋友用到的分支类型包括:

2



但会 是develop分支的分支版本,最终需要合并到develop分支中。

分支命名规则:除了master、develop、release-*、hotfix-*之外,你你这个 命名均可。

功能分支(有时被称为topic分支)通常为即将发布但会 未来发布版开发新的功能。当新功能开始英语 英语 研发,中有 该功能的发布版本在你你这个 还是无法取舍发布时间的。功能版本的实质是假使 你你这个 功能存在开发状况它就会存在,但会 最终会或合并到develop分支(取舍将新功能加上到不久的发布版中)或收回 (譬如一次令人失望的测试)。

功能分支通常存在于开发者的软件库,而完整都是在源代码库中。



在核心要素,研发模型很大程度上靠你你这个 现有模型支撑的。中心库有一个 可总爱延续的分支:

hotfix branch(修补bug分支)是从Master分支后边分出来的。类似,1.2版本是当前生产环境的版本但会 有bug。但会 开发分支(develop)变化还不稳定。亲戚朋友需要分出来一有一个 修补bug分支(hotfix branch)来处置你你这个 状况。

分支关闭的时侯从不忘了更新版本号(bump the version)

但会 ,修复bug,一次提交但会 多次分开提交。

–no-ff标志原因合并操作创建一有一个 新commit对象,即使该合并操作都不都还可否 fast-forward。这处置了丢失你你这个 功能分支存在的历史信息,将该功能的所有提交组合在同去。 比较:



后两种状况,不但会 从Git历史中看过哪些地方提交同去实现了一有一个 功能——你需要手工阅读完整的日志信息。但会 对整个功能进行回退 (比如一组提交),后两种最好的法律法律依据会是两种真正头痛的问题报告 报告 ,而使用–no-ff参数的状况则很容易.

是的,它会创建一有一个 新的(空)提交对象,但会 收益远大于开销。

不幸的是,我还没找到两种最好的法律法律依据,让–no-ff时作为合并操作的默认选项,但它应该是可行的。

Deleted branch release-1.2 (was ff452fe).

Deleted branch hotfix-1.2.1 (was abbe5d6).



都不都还可否 基于master分支,需要合并回develop和master分支。

分支名约定:hotfix-*

热修复分支与发布分支很类似,亲戚朋友都为新的生成环境发布做准备,尽管这是未经计划的。亲戚朋友来自生产环境的存在异常状况压力。当生成环境验证存在问题需要马上修复是,热修复分支都不都还可否 基于master分支上对应与线上版本的tag创建。

其本质是团队成员(在develop分支上)的工作都不都还可否 继续,而另一一自己准备生产环境的快速修复。

Release分支但会 从develop分支分离而来,但会 一定要合并到develop和master分支上,它的习惯命名最好的法律法律依据为:release-*。

Release分支是为新产品的发布做准备的。它允许亲戚朋友在最后时刻做你你这个 细小的修改。亲戚朋友允许小bugs的修改和准备发布元数据(版本号,开发时间等等)。当在Release分支完成哪些地方地方所有工作无需,对于下一次打的发布,develop分支接收features会更加明确。

从develop分支创建新的Release分支的关键时刻是develop分支达到了发布的理想状况。最少所有这要素发布的features需要在你你这个 点及时合并到develop分支。对于所有未来准备发布的features需要等到Release分支创建无需再合并。

在Release分支创建的无需要为即将发行版本分配一有一个 版本号,你你这个 完整都是早。直到那时,develop分支反映的变化完整都是为了下一有一个 发行版,但会 在Release分支创建无需,下一有一个 发行版到底叫0.3还是1.0是不明确的。你你这个 决定是在Release分支创建时根据项目在版本号上的规则制定的。

Switched to branch 'master'$ git merge --no-ff hotfix-1.2.1Merge made by recursive.(Summary of changes)$ git tag -a 1.2.1

本文转自开源中国社区,修复了几处文字错误。文章译者:Lax,xue777hua,FGQ,showme,Tocy,lidashuang,JoeyBlue。

英文原文:A successful Git branching model。

234567

在这篇文章中,我提出一有一个 开发模型。我但会 将你你这个 开发模型引入到我所有的项目里(无论在工作还是私人)但会 一年有余,但会 它被证明是非常成功的。我打算写哪些地方地方但会 无需了,但我总爱找非要时间来做,现在终于有时间了。我无需讲任何项目的具体细节,仅是关于分支策略和释放管理相关内容。

亲戚朋友把origin/develop库认为是主分支,该分支HEAD源码始终体现下个发布版的最新软件变更。村里人 称你你这个 为“集成分支”,而这是每晚自动构建得来的。

23456

猜你喜欢

1500元左右的手机,好用。性价比高。推荐一下吧。谢谢

下载百度知道APP,抢鲜体验你对你这俩 回答的评价是?展开完整版你对你这俩 回答的评价是?展开完整版本回答由提问者推荐怪怪的推荐魅蓝e华为和小米。上官网去看看,总有一款一款

2020-03-22

赵老师,您好,不知道你们是怎么对这些表做读写比例分析的(不改源码/改源码)?

0人评论发布于2016-04-1520:36:192016-04-1520:31:18Ali_冷香zhenzhongpan0人评论1377人浏览0收藏来源:[直播]0人评论发布

2020-03-22

推荐个性价比高的智能手机,1000到3000的.最好亲自试验过。

华为nova4不错的,全网通6GB+128GB版本华为商城官网在售价为2499元,手机参数如下:1、屏幕:屏幕尺寸为6.4英寸,屏幕色彩为1670万色,分辨率为FHD+2310

2020-03-22

AI·重构企业客户服务能力

用于实时预测用户对物品偏好,支持企业定制推荐算法,支持A/BTest效果对比深度1挖掘企业与企业、企业与人物的关系,通很多 位交叉分析及智能算法,构建基于企业全息画像和企业关

2020-03-21

想买部手机,现在什么手机好

4、电池:电池容量为1000mAh(典型值),标配充电器支持4.5V/5A或5V/4.5A或5V/2A输出,兼容9V/2A快充,理论充电时间约1.5小时,续航更持久。3、性能:

2020-03-21