对Git Flow作些微创新 (3)

昨天改完release分支的操做(http://www.jiangyouxin.net/2013/02/13/git_flow_2.html)。如今只剩hotfix了,固然,以后我发现我改的仍是release。 html

按照原始定义,hotfix其实和release很像,惟一的不一样是,release分支基于develop建立,而hotfix基于之前的版本TAG建立。源代码里,git-flow-hotfix明显是从git-flow-release复制了一份,而后做了些许修改,不少地方连注释都还没改过来。其实这哥俩不必分这么清楚,在个人版本里,是使用release分支来实现原版hotfix分支的功能,只是启动命令稍有不一样: git

    git flow release start <version> [<base>] github

若是省略<base>,则release分支基于develop建立,表明一个主线版本;若是<base>是一个版本TAG,则release分支基于TAG建立,表明一个修补版本(厂里叫作擦屁股版本)。git-flow-release原本就有基于某个base建立分支的功能,只须要再改两点便可: spa

(1) 修改sanity检查部分,容许多个release分支共存
这是由于之前的git flow是容许一个release和一个hotfix分支共存的。 .net

(2) 结束release分支,向master作--ff-only合并时,容许失败
若是一个release分支(原版是hotfix分支)从非最新发布版本的TAG(意味着master与TAG不重合)建立时,这个分支必然不能以Fast Forward的方式合并到master。但这是没有关系的,只要把TAG仍然打在分支上,并向develop合并便可。下一次发布develop时这个修改再引入master。
另外,原版git flow这种状况会直接用--no-ff合并,这是有严重问题的,会致使把新版本的修改引入旧版本。 htm

============ get

至此微创新就作完了,总共只改了git-flow-feature和git-flow-release两个文件。总结起来,改前者是为了作一个squash的正确实现;改后者是由于原版本对merge --no-ff有一些没必要要和错误的使用,以及让release分支同时支持hotfix的功能。 it

源代码放在了: https://github.com/JiangYouxin/gitflow io

其中t/squash分支是个人版本。欢迎各类XX,谢谢。 ast

============

为了说明我作的修改的正当性,我对git flow原版的问题,采起了绝不留情的态度;如今是该说好话的时候了。git flow自己很是简单,好比start命令就是git checkout -b而已,没有太多技术含量。它的主要功能,在于在作操做前执行充分的sanity检查(好比本地修改还没有提交以前,会拒绝将feature分支合并),防止在不恰当的时候作一些事情;同时绑定了一些操做(好比版本发布完成后,打TAG + 合并到develop 依序进行),防止某些事情被失望;另外在操做完成以后给一些贴心提示,让用户知道当前作了什么,以后要作什么。

相关文章
相关标签/搜索