自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Git工作流模式選型問(wèn)題探討

開(kāi)發(fā) 前端
開(kāi)發(fā)環(huán)境一般主要是給開(kāi)發(fā)調(diào)試程序時(shí)候使用的,而如果要從開(kāi)發(fā)狀態(tài)轉(zhuǎn)變?yōu)闇y(cè)試狀態(tài)的話,需要的是一個(gè)能夠長(zhǎng)期保障穩(wěn)定性和邏輯順暢性的代碼環(huán)境,這個(gè)時(shí)候建議可以通過(guò)新增一套release分支來(lái)進(jìn)行測(cè)試環(huán)境的代碼管理。

Git工作流

在企業(yè)內(nèi)的團(tuán)隊(duì)開(kāi)發(fā)場(chǎng)景中,可以采用多種Git工作流模式來(lái)管理團(tuán)隊(duì)成員間的代碼協(xié)同工作,今天來(lái)和大家深入探討下關(guān)于Git工作流的選型問(wèn)題,以及自己對(duì)于Git工作流模式未來(lái)的一些走向看法。

Gitflow模式

特點(diǎn):使用發(fā)布分支、特性分支、bug 修復(fù)分支以及預(yù)發(fā)布分支。主要分支包括 master、develop、feature、release、hotfix。

由于Gitflow模式涉及到了很多不同的分支名稱(chēng),所以這里我打算用一系列的圖來(lái)和大家介紹下這些分支的概念。

master/feature/develop 分支

首先我們的master分支一定是最終發(fā)布上線使用的分支代碼,所有的需求開(kāi)發(fā),都需要通過(guò)master分支中去checkout出來(lái),生成對(duì)應(yīng)的feature分支。

當(dāng)同一個(gè)項(xiàng)目涉及到多個(gè)分支改動(dòng)的時(shí)候,就難免會(huì)需要進(jìn)行分支合并后再發(fā)布到開(kāi)發(fā)環(huán)境的情況發(fā)生。

這時(shí)候可以通過(guò)利用新增一條develop分支的做法,將同一個(gè)項(xiàng)目的多條feature分支進(jìn)行merge后,再發(fā)布到開(kāi)發(fā)環(huán)境中。如下圖所示:

圖片圖片

采用新增develop分支的模式可以解決開(kāi)發(fā)環(huán)境多分支合并部署的問(wèn)題了。那么release分支又是做什么的呢?

release 分支

開(kāi)發(fā)環(huán)境一般主要是給開(kāi)發(fā)調(diào)試程序時(shí)候使用的,而如果要從開(kāi)發(fā)狀態(tài)轉(zhuǎn)變?yōu)闇y(cè)試狀態(tài)的話,需要的是一個(gè)能夠長(zhǎng)期保障穩(wěn)定性和邏輯順暢性的代碼環(huán)境,這個(gè)時(shí)候建議可以通過(guò)新增一套release分支來(lái)進(jìn)行測(cè)試環(huán)境的代碼管理。如下圖所示:

圖片圖片

從圖中可以看到,不同開(kāi)發(fā)負(fù)責(zé)的feature分支,在進(jìn)行提測(cè)的時(shí)候都需要往相同的release分支進(jìn)行合并。

當(dāng)release分支上的代碼通過(guò)測(cè)試回歸之后,我們可以視作此時(shí)的release分支的代碼是屬于可合并到master的狀態(tài)。因此一般這個(gè)時(shí)候會(huì)將release分支的代碼分別合并到master和develop分支上,以此來(lái)保證準(zhǔn)確性。同時(shí)此時(shí)可以將master分支的代碼發(fā)布到預(yù)發(fā)環(huán)境進(jìn)行最后的回歸驗(yàn)證。

hotfix分支

其實(shí)hotfix分支在使用上可以說(shuō)和feature分支基本一樣,它的定位是:對(duì)master分支上的bug進(jìn)行修復(fù)。hotfix分支也是需要從master分支中checkout出來(lái),然后進(jìn)行修改,最后合并到develop/release分支上進(jìn)行回歸驗(yàn)證,最后并入到master分支進(jìn)行發(fā)布。在一定程度上,hotfix屬于feature分支的一種特殊類(lèi)型。

圖片圖片

git-flow模式的痛點(diǎn)

其實(shí)用久了git-flow模式后,你會(huì)很容易發(fā)現(xiàn),這種模式對(duì)于分支的領(lǐng)域劃分是非常清晰的。例如develop分支專(zhuān)門(mén)用于開(kāi)發(fā),release分支專(zhuān)門(mén)用于測(cè)試,hotfix分支專(zhuān)門(mén)用于打補(bǔ)丁。

但是隨著迭代的增加,這些分支的管理是一件比較容易出錯(cuò)的事情。例如:手誤將feature分支合并到release分支。hotfix分支忘記合并到develop分支等等。release分支包含了太多feature分支代碼,其中部分feature分支延遲上線導(dǎo)致release分支代碼需要移除部分commit后再合并到master分支。

這是我認(rèn)為的git-flow模式的一大痛點(diǎn)。雖然它強(qiáng)調(diào)于對(duì)分支的標(biāo)準(zhǔn)化管理,但是實(shí)際落地在團(tuán)隊(duì)使用的時(shí)候,很多毛病都會(huì)體現(xiàn)出來(lái)。

Github flow模式

特點(diǎn):Github flow 是Git flow的簡(jiǎn)化版,專(zhuān)門(mén)配合"持續(xù)發(fā)布"。它是 Github.com 使用的工作流程。

步驟

  1. 拉取最新的代碼:git pull origin master 
  2. 創(chuàng)建新的功能分支:git checkout -b feature-branch master
  3. 開(kāi)發(fā)功能:在新創(chuàng)建的分支上進(jìn)行修改、提交和測(cè)試
  4. 合并到master:git checkout master -> git merge feature-branch
  5. 推送到中央存儲(chǔ)庫(kù):git push origin master

圖片圖片

這種模式比較適合于合作人數(shù)較少的場(chǎng)景中進(jìn)行快速開(kāi)發(fā)和迭代。在實(shí)際使用中,團(tuán)隊(duì)leader只需要保障master分支的“干凈”即可。各個(gè)團(tuán)隊(duì)成員的特性分支代碼獨(dú)立。但是如果是涉及到需要多人合作對(duì)同一個(gè)項(xiàng)目進(jìn)行并行開(kāi)發(fā),需要多次進(jìn)行代碼合并的話,這種開(kāi)發(fā)模式就很痛苦。

Gitlab flow 模式

采用Github flow模式雖然說(shuō)很靈活,但是它有個(gè)強(qiáng)制的要求就是master分支的代碼一定要和生產(chǎn)環(huán)境的代碼對(duì)齊。

但是在一些特殊的應(yīng)用場(chǎng)景中,例如IOS開(kāi)發(fā)(需要有審核時(shí)間),某些SAAS平臺(tái)的一些特殊功能開(kāi)發(fā),在那類(lèi)場(chǎng)景中經(jīng)常是會(huì)出現(xiàn)代碼合并到master,但是需要延遲一段時(shí)間才發(fā)布到生產(chǎn)環(huán)境。

Gitlab flow模式就是在上述的Github flow模式中進(jìn)行的衍生,增加了一個(gè)所謂的pre-production分支,用于作為待發(fā)布狀態(tài)的環(huán)境分支,它的代碼合并流程如下所示:

圖片圖片

處于pre-production分支的代碼是經(jīng)過(guò)驗(yàn)證可以合并到生產(chǎn)環(huán)境的代碼,而production分支的代碼則是生產(chǎn)正在運(yùn)行中的代碼。這個(gè)由pre-production到production分支的合并動(dòng)作,需要由CICD平臺(tái)自動(dòng)化來(lái)實(shí)現(xiàn)。

說(shuō)實(shí)話,我在實(shí)際工作中主要還是用的Github flow模式,Gitlab flow模式個(gè)人接觸得并不多。

我的看法

早些年工作的時(shí)候,經(jīng)歷過(guò)一些多人合作修改同一個(gè)項(xiàng)目的開(kāi)發(fā)工作。那會(huì)團(tuán)隊(duì)采用的是git flow的工作流,當(dāng)時(shí)總是會(huì)出現(xiàn)合并沖突,分支錯(cuò)亂,git命令使用錯(cuò)誤導(dǎo)致代碼丟失等問(wèn)題。

但是隨著這些年微服務(wù)的普及,很多公司其實(shí)都已經(jīng)陸續(xù)意識(shí)到了大單體架構(gòu)的痛點(diǎn),于是也按照領(lǐng)域劃分拆解為了多個(gè)微服務(wù)。

實(shí)際上,隨著微服務(wù)粒度在不斷降低,每個(gè)開(kāi)發(fā)所負(fù)責(zé)的領(lǐng)域也開(kāi)始進(jìn)行了劃分。如果服務(wù)劃分合理,其實(shí)一個(gè)項(xiàng)目基本上主需要一個(gè) 主程 (core  developer,有些公司習(xí)慣叫項(xiàng)目owner)去維護(hù)基本就OK了。如果是這種模式下進(jìn)行代碼開(kāi)發(fā)的話,其實(shí)采用經(jīng)典的 github flow 或者 gitlab flow 模式進(jìn)行開(kāi)發(fā)即可滿(mǎn)足。

我認(rèn)為,隨著日后的發(fā)展,業(yè)內(nèi)技術(shù)的走向一定是將事情由繁化簡(jiǎn)。隨著企業(yè)內(nèi)部的CICD技術(shù)體系完善,git flow這種笨重的模式也會(huì)漸漸被摒棄,github flow/gitlab flow 這種靈活輕便的模式會(huì)越來(lái)越受人追崇。

對(duì)于git工作流模式來(lái)說(shuō),我認(rèn)為沒(méi)有絕對(duì)完美的方案,只能說(shuō)結(jié)合當(dāng)前所遇到的業(yè)務(wù)場(chǎng)景來(lái)靈活制定,見(jiàn)招拆招。

責(zé)任編輯:武曉燕 來(lái)源: Idea的技術(shù)分享
相關(guān)推薦

2021-10-14 11:34:05

技術(shù)工作流引擎

2015-06-24 10:18:26

2022-02-21 10:50:28

SvnGitHub分支

2021-02-20 06:11:07

Git-Flow工作流分支

2022-07-10 21:17:01

GitTigLinux

2022-10-26 08:00:43

Activiti工作流BPM

2024-04-25 08:00:00

DevOps架構(gòu)軟件開(kāi)發(fā)

2013-04-23 10:28:08

IBeamMDAAWF

2015-03-23 11:17:55

docker高效開(kāi)發(fā)工作流

2012-07-23 10:36:46

工作流

2010-01-04 17:42:50

SilverLight

2009-03-03 09:13:36

工作流BPM業(yè)務(wù)流程

2023-01-04 08:02:16

工作流架構(gòu)設(shè)計(jì)

2023-07-05 09:48:44

Activiti部署

2011-12-14 09:58:58

JavajBPM

2025-04-28 09:10:00

智能體Agent工作流

2020-02-27 15:53:01

開(kāi)發(fā)技能代碼

2015-07-14 09:26:28

微型工作流引擎設(shè)計(jì)

2024-08-05 12:46:51

2024-10-17 08:39:32

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)