用Git會行既flow

[Git][今日望緊d用Git會行既flow有少少想法,歡迎指正]

尋日同事講起Git Flow,所以我今日都睇左睇

Git Flow:
http://nvie.com/posts/a-successful-git-branching-model/

簡單講就係:
1) 有條master branch但永遠只做merge不會直接commit change。
2) 有條long-live既Dev branch專做integration (CI)。
3) 所有change feature都由dev branch開branch去做,做完merge返去dev。
4) dev既changes做到咁上下就分支出一條release branch (RC)。
5) release branch冇乜問題confirm左ok就merge返去master。
6) long live既永遠只係得1條master同1條dev branch。
我講完都係講到一舊舊,所以你最好都係睇返條link入面張圖同d解釋比較好。

不過我覺得會有個問題就係,
佢有個assumption係dev既changes係一定要eventually做到stable之後出release merge返去master。
而個問題係,現實中好多project既release過程都係dev做做下時adhoc加減features。
加feature就冇乜問題,咪開多條branch做完咪merge。
但減feature可能比較麻煩,例如當某feature做完後merge左落dev,但依個時候又話唔要include依個feature咁點?

我諗到可能有幾個workaround:
(1) rebase/reset攪
(2) 人手reverse返果個features既changes
(3) 出release時cherry-pick淨係揀要出既feature先出release & merge去master
(4) 唔會remove feature,會照release merge去master,但會用feature toggle去disable相關feature

而幾種做法都分別有佢地各自既drawbacks。
(1):會攪一大輪野比較麻煩,同埋如果decentralized既repo之間可能會有branch conflict問題未必攪到
(2):勁核突夾硬黎
(3):唔出release果個feature留左o係dev但又唔知點,會唔會過左段時間之後冇左回事?
(4):feature toggle本身其實係technical debt,積住d feature toggle o係code base入面會影響到software本身quality

———————————————————————————

後黎我睇到有人講另一種flow model (2012年sosad)

Another Git branching model

我覺得依種flow好似比較better handle adhoc feature加減既問題。

簡單講就係:
1) 有條master branch但永遠只做merge不會直接commit change。
2) 所有feature branch都由master分支出黎。
3) 有一條integration branch,所有feature branch定時定侯都會merge落integration branch做CI。但同Git Flow唔同既係依條branch永遠唔會merge返轉頭,純粹CI。
4) 有一條staging branch。所有準備出release既feature ready後都會merge去staging。staging ready for release就merge返去master出release。呢條branch係RC branch。

佢本身個model似係long live既branch係master﹑integration﹑staging。
如果我冇理解錯,其實本身就咁依個model都未必handle到adhoc加減feature。
但我覺得可以改一改:
1) for出某個release,可以有一個for果個release既integration branch做staging
2) 當要adhoc減features時,可以dump左原本條integration branch,然後再開過另一條integration branch,merge返新requirement需要既feature落去。
3) 同樣地,等staging ready就release去maste。
4) Integration branch由於乜垃圾都pack晒入去,但唔會remove垃圾亦唔會merge back,所以耐左都係變垃圾站。所以同樣地,可以隔一排就dump左原本條integration,開過條新既integration branch。

我覺得咁樣既model好似比較好,因為:
1) 開branch/dump branch對git黎講其實rather non-expensive。
2) adhoc加減個case時,唔駛cherry pick/rebase。
3) 今次冇release到既feature可以唔駛鏟,照獨立keep住先,等將來先再merge/dump。

———————————————————————————

other references:
http://dymitruk.com/blog/2012/02/05/branch-per-feature/

#個人理解 #如果有錯請指正 #need_validation

Leave a Reply

Your email address will not be published.