0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Git Flow應(yīng)該拋棄的原因

汽車玩家 ? 來源:雷鋒網(wǎng) ? 作者:skura ? 2020-03-21 13:41 ? 次閱讀

導(dǎo)語:或許,Git-flow 分支模型應(yīng)該葬身火海 。

Git-flow 是一種分支和合并方法。十年前,因為一篇名為「一個成功的 Git 分支模型」的文章,Git-flow 變得廣為人知。

在過去的十年里,無數(shù)團隊被這篇博文蒙在鼓里。但我敢說,這篇文章撒謊了。

如果你讀過這篇博文,你就會注意到,盡管作者聲稱他們在項目中成功使用了 Git-flow,但卻故意避開了讓項目成功的細(xì)節(jié)。

很多人會相信看到的博文,這其實是錯誤的。并非所有的策略都適用于所有情況,這是一個真理。我將同樣的邏輯應(yīng)用于這個分支模型。

好吧,你們當(dāng)中的一些人不相信這個真理,所以讓我們深入研究為什么 Git-flow 分支模型應(yīng)該葬身火海。

Git-flow 的界面很復(fù)雜

Git-flow 特別復(fù)雜,甚至在考慮微服務(wù)或連續(xù)交付之前就已經(jīng)如此了。下面的圖片直觀地展示了這一點:

Git Flow應(yīng)該拋棄的原因

圖片來源:https://nvie.com/posts/a-successful-git-branching-model/

這里有特性分支、發(fā)布分支、master 分支、dev 分支、一個緊急修復(fù)分支和 git 標(biāo)記。這些都是在構(gòu)建和發(fā)布過程中必須跟蹤、理解和考慮的事情。

更重要的是,你還需要隨時跟蹤每個分支,這造成了很高的認(rèn)知負(fù)荷。我已經(jīng)使用 git 10 年了,我甚至不確定自己是否能在精神上跟上這里的發(fā)展。

Git-flow 違反了「短命」分支規(guī)則

在 git 中,隨著在某個分支上工作人數(shù)的增加,發(fā)生合并沖突的次數(shù)將大大增加。在 Git-flow 中,這個數(shù)字增加得更多,因為還有三個具有不同生命周期的其他分支合并到開發(fā)中:特性分支、發(fā)布分支和緊急修復(fù)。合并沖突發(fā)生的可能性并不是線性變化的,它可能會使合并沖突的概率增加三倍。

這太糟糕了。

雖然我不敢說不采用 Git-flow 這樣的分支策略就可以避免合并沖突,但是當(dāng)所有這些分支組合在一起時,引入的潛在復(fù)雜性太大了,無法忽略。如果你們公司的代碼提交速度很慢,那就沒關(guān)系。但是對于任何快速迭代的組織或初創(chuàng)企業(yè)來說,情況并非如此。

Git-flow 放棄了rebase

重新定位合并節(jié)點是一個復(fù)雜的話題,但它很重要。如果你使用 Git-flow,你將不得不放棄 rebase。記住,rebase 取消了合并提交,你再也看不到兩個分支組合在一起的節(jié)點。由于 Git-flow 的視覺復(fù)雜性,你需要可視化地跟蹤分支,這意味著如果你想解決問題,就不需要 rebase。

Git-flow 使連續(xù)交付變得不可能

持續(xù)交付是一種實踐。在這種實踐中,團隊以自動化的方式直接發(fā)布到生產(chǎn)中(實際上是合并到 master)??纯椿靵y的 Git-flow,你能解釋一下如何持續(xù)地交付嗎?

整個分支模型是根據(jù)可預(yù)測的、長期的發(fā)布周期進(jìn)行預(yù)測的。如果每隔幾分鐘或幾小時發(fā)布一次新代碼,開銷就太大了,更不用說 CD 的中心實踐之一是向前滾動修復(fù)。Git-flow將修補程序視為一個單獨的實體,需要小心地控制,并與其他工作分離開來。

在多個存儲庫中不可能使用 Git-flow

隨著微服務(wù)的出現(xiàn),micro-repo 的理念也得到了更多的推動,各個團隊可以控制他們的存儲庫和工作流,他們還可以控制誰進(jìn)入了他們的存儲庫以及其工作流是如何工作的。

你有沒有嘗試過這樣一個復(fù)雜的分支模型:它有多個團隊,并且希望它們都在同一個頁面上?這是不會發(fā)生的。很快,這個系統(tǒng)就變成了不同 repo 的不同版本的一個清單,只有敲出 YAML 來更新清單的人知道所有東西在哪里。如果你不夠細(xì)心,「在生產(chǎn)什么」就變成了一個存在主義的問題。

Git-flow 也不可能在 monorep 中使用

因此,如果由于協(xié)調(diào)發(fā)布的困難而取消了 micro-repo,那為什么不讓所有微服務(wù)團隊都遵守一個大的發(fā)布分支工作流呢?

這個過程大約持續(xù) 3.2 秒。如果團隊是獨立的,micro-repo 應(yīng)該是獨立部署的,這樣就不能很好地將你的工作流程與你在 mono repo 中創(chuàng)建的集中式分支模型聯(lián)系起來。

誰應(yīng)該/不應(yīng)該使用 Git-flow?

如果你的團隊每月或每季度發(fā)布一次,并且是一個并行處理多個發(fā)布的團隊,那么 Git-flow 可能是一個不錯的選擇。如果你的團隊是一個初創(chuàng)企業(yè),或者是一個面向 internet 的網(wǎng)站或 web 應(yīng)用程序,同一天可能發(fā)布多個版本,那 Git-flow 對你來說就不合適了。如果你的團隊是一個不到 10 人的微型團隊,Git-flow 會給你的工作帶來太多的規(guī)矩和開銷。

另一方面,如果你的團隊有 20 多人進(jìn)行并行發(fā)布,那么 Gitflow 可以確保不會把事情搞砸。

如果不應(yīng)該使用 Git-flow,那應(yīng)該用什么?

我不能回答。并非所有分支模型都適用于所有團隊和所有情況。如果你練習(xí) CD,你需要一些盡可能簡化過程的東西。

關(guān)鍵在于,團隊需要反思:這個分支模型將幫助我們解決哪些問題?會產(chǎn)生什么問題?這種模型將鼓勵什么樣的發(fā)展?我們想鼓勵這種行為嗎?使用分支模型的最終目的都是方便軟件開發(fā)過程中的合作,因此,需要考慮使用它的特定人群的需求,而不是互聯(lián)網(wǎng)流傳的「成功」的東西。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Git
    Git
    +關(guān)注

    關(guān)注

    0

    文章

    195

    瀏覽量

    15711
收藏 人收藏

    評論

    相關(guān)推薦

    ubuntu下的vscode插件安裝idf時,總是找不到git,為什么?

    總是提示:Git is not found in current environment 但是我已經(jīng)在setting.json下設(shè)置了\"git.path\": \"/bin/git\" 同行,命令行里查看
    發(fā)表于 06-21 07:16

    Git發(fā)布新版本 修補五處安全漏洞 包含嚴(yán)重遠(yuǎn)程代碼執(zhí)行風(fēng)險

    CVE-2024-32002漏洞的嚴(yán)重性在于,黑客可通過創(chuàng)建特定的Git倉庫子模塊,誘騙Git將文件寫入.git/目錄,而非子模塊的工作樹。如此一來,攻擊者便能在克隆過程中植入惡意腳本,用戶幾乎無法察覺。
    的頭像 發(fā)表于 05-31 10:09 ?515次閱讀

    飛凌ElfBoard ELF 1板卡-ubuntu18.04 git安裝及基本使用

    1.安裝gitsudo apt-get install git 2.git初始化git init 3.設(shè)置用戶名和郵箱git config --global user.name \"你
    發(fā)表于 03-21 16:23

    藍(lán)牙 | 軟件:Git管理高通的ChipCode項目

    最近發(fā)現(xiàn)大家在高通chipcode網(wǎng)站上下載不了代碼,小編一直使用git的方式獲取新版本代碼,沒有遇到什么阻礙。于是小編到新主機上嘗試下載代碼的壓縮包和git代碼,都遇到了問題。由于壓縮包是高通自己
    的頭像 發(fā)表于 01-26 08:29 ?330次閱讀
    藍(lán)牙 | 軟件:<b class='flag-5'>Git</b>管理高通的ChipCode項目

    克服PLC編程的難題—基于Git的軟件

    Git是一種分布式版本控制系統(tǒng),它可以記錄文件的修改歷史和版本變化,并可以支持多人協(xié)同開發(fā)。
    的頭像 發(fā)表于 01-22 09:30 ?886次閱讀
    克服PLC編程的難題—基于<b class='flag-5'>Git</b>的軟件

    Git開發(fā)者關(guān)注內(nèi)存安全問題,探討引入Rust語言

    根據(jù)最新披露的郵件討論,Git開發(fā)團隊熱議在Git項目中引入Rust的可行性。作為一種開源的分布式代碼版本管理工具,廣泛運用于各種開發(fā)項目。盡管現(xiàn)在Git項目主要以C與Python為主要開發(fā)語言,但探討顯示,引入Rust能顯著降
    的頭像 發(fā)表于 01-15 14:23 ?522次閱讀
    <b class='flag-5'>Git</b>開發(fā)者關(guān)注內(nèi)存安全問題,探討引入Rust語言

    SOLIDWORKS 2024 Flow Simulation

    SOLIDWORKS? Flow Simulation作為單獨購買的產(chǎn)品提供,您可將其與 SOLIDWORKS Standard、SOLIDWORKS Professional和SOLIDWORKS Premium一起使用。
    的頭像 發(fā)表于 01-05 14:30 ?654次閱讀
    SOLIDWORKS 2024 <b class='flag-5'>Flow</b> Simulation

    GIT(分布式版本控制系統(tǒng))的工作原理

    都是完整的,功能更強大,自然而然操作更復(fù)雜一些。git在本地也是以git版本庫的形式管理,可以在本地做一些修改,然后commit到本地的版本庫,最后push到服務(wù)器。
    的頭像 發(fā)表于 12-21 16:09 ?753次閱讀
    <b class='flag-5'>GIT</b>(分布式版本控制系統(tǒng))的工作原理

    Git命令解決常見場景記錄

    本文主要歸納一下git的學(xué)習(xí)記錄,在開發(fā)期間發(fā)現(xiàn)了git在sourcetree的處理不是很好,對于多選文件的丟棄這點不是很方便,所以做一個記錄,由于項目中有新建的文件,所以被識別為未跟蹤的文件,但我
    的頭像 發(fā)表于 12-20 09:44 ?383次閱讀
    用<b class='flag-5'>Git</b>命令解決常見場景記錄

    git切換遠(yuǎn)程地址分支方式

    git remote set-url origin URL】 更換遠(yuǎn)程倉庫地址,URL為新地址。
    的頭像 發(fā)表于 12-18 09:35 ?2039次閱讀

    Git命令之本地分支與遠(yuǎn)程分支關(guān)聯(lián)和解除

    在實際的工作生活中,往往需要將本地的分支和遠(yuǎn)程分支關(guān)聯(lián),這樣我們就可以使用git pull命令來更新拉取最新的代碼,并使用git push命令將自己本地的修改推送到遠(yuǎn)程倉庫。但是如果此時你本地關(guān)聯(lián)
    的頭像 發(fā)表于 12-15 09:27 ?2678次閱讀
    <b class='flag-5'>Git</b>命令之本地分支與遠(yuǎn)程分支關(guān)聯(lián)和解除

    git命令的基本使用

    git config 第一次使用git或者剛安裝的git時,使用此命令設(shè)置身份Name 和 Eamail 地址。并且每次提交時會使用此信息。
    的頭像 發(fā)表于 12-11 13:53 ?852次閱讀

    Mozilla Firefox開發(fā)將完全轉(zhuǎn)向Git,放棄Mercurial

    目前相關(guān)事項仍在規(guī)劃中,預(yù)計至少六個月后才會開始全面的 Git 過渡。過渡完成后,Mercurial 將從 Firefox 開發(fā)工作流程中完全淘汰。
    的頭像 發(fā)表于 11-23 16:08 ?579次閱讀
    Mozilla Firefox開發(fā)將完全轉(zhuǎn)向<b class='flag-5'>Git</b>,放棄Mercurial

    Git是如何存儲文件的?Git的工作原理解析

    我以為我已經(jīng)對 Git 的工作方式了如指掌,但我以前從未真正涉及過打包文件,所以這次探索很有趣。我也很少思考當(dāng)我讓 git log 跟蹤一個文件的歷史時,它實際上有多大的工作量,因此也很開心能深入研究這個。
    的頭像 發(fā)表于 10-31 15:36 ?516次閱讀

    Git中最常用的命令介紹

    git add命令用于將修改的文件添加到下一次提交的暫存區(qū)。你可以指定要添加的文件git add命令用于將修改的文件添加到下一次提交的暫存區(qū)。你可以指定要添加的文件,例如git add file1.txt file2.txt。
    發(fā)表于 10-26 10:27 ?199次閱讀
    <b class='flag-5'>Git</b>中最常用的命令介紹