對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 依序進行),防止某些事情被失望;另外在操做完成以後給一些貼心提示,讓用戶知道當前作了什麼,以後要作什麼。

相關文章
相關標籤/搜索