GitFlow 流程說明及注意要點 === ###### tags: `版本控制`, `Git`, `version control` [TOC] *** ## 先說注意要點 * **feature branch不要太長壽,最多最多,不要超過一個sprint** * **萬一內容太多,就回頭跟 PM 商量,這個需求太大了,必須修剪** * **品質好的自動測試可以消除你對頻繁回主線的疑慮** * **進版前一定要開 release,此版本一定要與整測機(如果有)上的運行的保持同步** * **承上,改一行註解也必須做到!** * **hotfix跟release開啟的同時就要決定版號,這能幫你確認版本** * **經常存在的branch只有兩個:develop與master** ***  # feature branch 早上你泡好咖啡,從你的座位上坐下,決定好今天要為這個專案加上一個發email的新功能,於是這個時候你要做的事是『加新功能』。既然如此,你就應該創一個新的feature branch,並將其命名為『add_email_feature』。  上圖中的粉紅圈圈所在的支線就是你新創的branch。依照gitflow的規定,他會被加上一個feature的目錄名:feature/add_email_feature,不為什麼,只是為了方便辨識與管理而已。 接下來你就開始開發,開發與自動測試過程花了三天,結束後你就要結束這個branch,於是你merge回develop,一切又如一開始那樣祥和,世上只剩develop和master兩大branch。  左圖這樣同時有好幾的feature同時在開發的場景多了去了。但是gitflow告訴我們不用擔心,儘管開發自己的功能便是,但是你一定要注意一點,開發測試完自己的功能就一定要趕快merge回主線,並且結束這個branch。 *記住,無論何時,都要讓流浪在外的feature branch越少越好,branch生命週期越短越好。這件事情對幫助develop的穩定度有莫大的好處。* 你一定也遇過一種情形,功能還沒要上線,你不敢放到主線,於是只好放在feature branch上癡癡的等老闆點頭上線,你才敢merge。這種事很常見,但這不是允許一個長壽branch存在的理由。身為一個好的RD,你應該要有能力設下安全的toggle,並且同時能附上足夠完整的auto test讓你有信心這個toggle不容易被誤啟,更有信心QA有能力驗證這個toggle的開關,同時QA驗過的版本就肯定是拿去上線的版本才對。 所以,請記住:feature branch的長度不應過長。如果上述的因素你都能夠排除,feature branch還是很長壽,那麼只剩一個原因了:feature內容開過大。請回頭找你的 PM 商量,試著再多拆分成幾個獨立的小feature。 # Release 好不容易熬到要上線了,這個時候我們要做的第一件事,就是要來決定版號。怎麼決定版號並不在本文要討論的範圍內,總之他就是被決定了。接著就是要來開release branch了。  上圖中綠色的點,描述的正是release branch極短的一生。開啟release branch之後,就開始進入生產前的總驗測(部署到整測環境)。 若沒有整測環境,則把release branch當成是進入master前的緩衝,讓總驗測針對master進行,一旦發生問題就視同正式環境問題處理,也就是開hotfix。 有一件事一定要嚴格遵守: *一旦release開出來,就只能修bug,不能開新功能。 一旦release開出來,就只能修bug,不能開新功能。 一旦release開出來,就只能修bug,不能開新功能。* # Production 一旦產品在正式環境出了問題,唯一一條路就是解掉他了。這個時候hotfix就該出場了。  上圖的紅點就是hotfix,它從master開出來,結束時回到master,順便修復develop 我們對待hotfix就要像release一樣: * 開了branch的同時就要決定版號 * 只准修bug,不准偷渡新功能 驗測完畢,hotfix結束,產品上線,順便修復develop,世界又回到最原始的單純狀態,只剩下develop和master了 *** ## 參考連結 + [原文連結](https://medium.com/kuma%E8%80%81%E5%B8%AB%E7%9A%84%E8%BB%9F%E9%AB%94%E5%B7%A5%E7%A8%8B%E6%95%99%E5%AE%A4/%E5%9F%BA%E7%A4%8E-git-flow-%E5%B7%A5%E4%BD%9C%E6%B3%95-fa50b1dddc4f) + [觀念補充 - 從頭釐清基本觀念](https://www.ithome.com.tw/news/95283)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up