主頁 > 軟體工程 > 豬齒魚實踐之持續交付中的分支管理與版本控制

豬齒魚實踐之持續交付中的分支管理與版本控制

2022-02-18 07:27:45 軟體工程

現在越來越多的專案使用Git作為版本控制的工具,通過Git進行分支和Tag管理,大多數情況這個程序都由手工完成,缺乏相應的規范,對于分支和版本號的控制也很隨意,出現這樣的情況往往是大家對軟體交付程序中的軟體版本控制不夠重視,“只要確保軟體是最新的版本即可”,甚至是專案管理的漏洞或者缺陷,其實軟體的版本控制以及分支管理貫穿于整個軟體產品的生命周期,日常的專案管理對于開發團隊能否有節奏且順利的交付軟體也很重要,

的確!頻繁的沖突搞的開發人員頭暈腦脹,例如,一次專案在代碼合并時出現了沖突,導致整個專案組挨個排查,花費了大半天的時間,影響開發效率還浪費資源;開發人員隨意創建分支,各種不規范的合并使得Git Graph線條雜亂無章,完全看不出來主干發展的脈絡;提交資訊混亂,不知道這次提交是因為什么,實作了什么功能 ,解決了什么問題,

本文并不是一篇技術文章,其中也沒有讓別人耳目一新的觀點或者論述,本文是為我們這些希望進行簡單、有效地協作的人準備的,任何參與到軟體開發的人,無論承擔何種角色,都可能對其感興趣——畢竟每個人都會用到分支和合并,本文將結合Choerodon豬齒魚為大家闡述如何進行方便有效的分支管理和版本控制,以及如何選擇適合自身的版本控制模型,

如何來解決這些問題呢?

有經驗的老司機可能會說,“建立規范”,

是的,只有建立規范,才能抑制不好的事情繼續在專案組蔓延,至于建立什么樣的規范?我們不妨先制定一個目標,

目標

  • 簡單——所有的團隊成員每天都會使用這些模式,所以相關規則和程式必須要簡單明了,
  • 靈活——可選擇不同的分支管理模型,例如GitFlow、GitLabFlow或者GitHubFlow,甚至自定義,
  • 可視化——界面化比命令列更安全可控,將分支管理模型的規則和約定固化到系統中,
  • 需求與代碼關連——分支需要和具體的任務需求關連,

作為一個有經驗專案管理者,或者產品負責人,你一定會思考一個問題:我們專案組在開發程序中應如何管理分支?不錯,分支管理將和專案組開發人員日夜伴隨,如果采用了一個不合適的分支管理模型,那么可以想象兄弟們得多么的痛苦,

Okay,那么就從分支管理模型開始……

分支管理規范

GitFlow、GitHubFlow等都是已經被證明很有效的分支管理模型,但是這些更多的是書面的規則、約定,基本上是靠著程式員的自覺性和Git命令一起維持著這個約定,其實無數的經驗告訴我們“這很脆弱”,所以,如何使用系統界面化操作將這些規則和約定表示出來,就變得很有意思,

分支管理模型

不要著急,先來看看 Choerodon 豬齒魚提供的分支模型,Choerodon使用 GitLab 進行分支管理,默認分支為 master,目前支持七種常見的分支型別:

  1. master:主分支,用于版本持續發布;
  2. develop:開發分支,即日常迭代使用的開發分支,用于日常開發持續集成;
  3. feature:特性分支,用于日常開發時切出分支進行單功能開發;
  4. bugfix:故障修補分支,通常用于修復故障;
  5. release:發布分支,適用于產品發布、產品迭代;
  6. hotfix:熱修分支,用于產品發布后修復缺陷;
  7. custom:自定義分支,用戶可以自定義需要的分支型別,

注:

  1. develop是GitFlow分支模型的重要組成部分,
  2. bugfix旨在與敏捷的問題型別(故障)呼應,用于標識此分支的任務是修復某個故障,

這7個分支就是我們手中的7個魔方,通過這7個魔方的組合可以變化出無盡的分支管理模型,比如GitHubFlow,

GitHubFlow分支模型只存在一個master主分支,日常開發都合并至master,永遠保持其為最新的代碼,

  • 在領到日常開發任務時,基于master創建feature特性開發分支,提交代碼后,合并至master并洗掉feature,
  • 在領到修復故障的任務時,基于master創建bugfix故障修補分支,提交代碼后,合并至master并洗掉bugfix,
  • 需要發布時,同樣需要基于master創建release,生成的應用版本部署在UAT測驗環境進行測驗,若需要修改則提交至release,
  • 產品上線后發現故障需要緊急進行熱修復時,則基于tag創建hotfix,將修復的代碼提交至hotfix;部署該分支上的版本通過驗收后,基于hotfix打出熱修版本的tag,如0.8.1,
  • 由于新版本的迭代也同時進行,所以需要在hotfix上rebase master,變基至master分支最新的提交,再合并至master并洗掉hotfix,就可以將本次修改的提交應用至master上,

這個分支模型的優勢在于簡潔易理解,將master作為核心的分支,代碼更新持續集成至master上,根據目前收集到的反應來看,得到了更多的好評,認為GitHubFlow分支模型更加輕便快捷,

如果GitHubFlow不合適,可以使用GitLabFlow或者GitFlow,也可以自行定義規則,這里沒有“銀彈”,只是相對比較靈活的配置,

分支命名規約

有了分支管理模型,還需要命名規約,不同型別的分支命名方式應該不同,值得慶幸的是,豬齒魚已經幫你完成了這個步驟,feature、bugfix分支的分支名使用的是關聯問題的issue號(在豬齒魚中打通了需求和代碼分支的關連關系),對于release及hotfix,分支名可命名為需要發布的版本號,如0.8.0、0.8.1等,在這里使用到了類似0.8.0這樣的版本編號規則,如果你對此不了解,沒有關系,在下面將詳細的介紹,

提交命名規約

除了分支的名稱需要規范,提交的命名也同樣如此,不幸,豬齒魚并沒有把這個規則固化到系統中,需要團隊共同遵守,

格式為:[操作型別]操作物件名稱,如[ADD]readme,代表增加了readme描述檔案,

常見的操作型別有:

  • [IMP] 提升改善正在開發或者已經實作的功能
  • [FIX] 修正BUG
  • [REF] 重構一個功能,對功能重寫
  • [ADD] 添加實作新功能
  • [REM] 洗掉不需要的檔案

合并請求

合并請求是開發程序中必不可少的一個環節,其中有如下一些重要的事情要做:

  1. 代碼Review
  2. 啟動CI
    • 單元測驗
    • 代碼質量檢查

版本號規則

在軟體管理的領域里存在著被稱作“依賴地獄”的死亡之谷,系統規模越大,加入的套件越多,你就越有可能在未來的某一天發現自己已深陷絕望之中,
                              —— Tom Preston-Werner 的《語意化版本2.0.0》

在這里我們不去解讀到底什么是“依賴地獄”,大家可以到語意化版本2.0.0中了解,那么,我們的重點是什么呢?在這之前,先了解一下“語意化的版本控制”

版本格式:主版本號.次版本號.修訂號,版本號遞增規則如下:

1.主版本號:當你做了不兼容的 API 修改,
2.次版本號:當你做了向下兼容的功能性新增,
3.修訂號:當你做了向下兼容的問題修正,

先行版本號及版本編譯資訊可以加到“主版本號.次版本號.修訂號”的后面,作為延伸,

這就是“語意化的版本控制”最核心的規則,當然這不是全部,Tom Preston-Werner還詳細的闡述了主版本號、次版本號和修訂號的變化遞增規則,不過這些規則很長,很復雜,

沒有關系,豬齒魚幫我們做了這些復雜的事情,將“語意化的版本控制”固化到了系統中,簡而言之,

  • 當進行代碼打包時,而非發布新版本

將版本號規則定為年.月.日-時分秒-分支名,如:2018.7.20-152837-hotfix-0.8.1,這個時間是當前提交時間,當代碼提交到各個分支上時會自動觸發CI,生成版本號規則如上所示,

  • 當需要發布新版本時,例如如0.8.00.8.1
    • 主版本號:當做了不兼容的 API 修改或功能強大的升級,可以將主版本號的數值增加1,
    • 次版本號:當做了向下兼容的功能性新增或是功能上的小迭代,可以將次版本號的數值增加1,
    • 修訂號:當做了向下兼容的問題修正,但功能上沒有很大的變化,可以將修訂號的數值增加1,

需求與代碼關連

一直以來,需求一般和系統的功能聯系在一起,但是與代碼關連卻不常見,如果能將需求和代碼聯系在一起,奇妙的化學反應就發生了,

“我們可以追溯到一個用戶故事對應了哪些分支,哪幾個提交”, “甚至出現了一些BUG,可以找到是哪個分支提交的,當初為了發布XXX新的需求”, “不僅如此,我們通過需求與代碼分支關連,能夠查看到哪些需求已經部署到了測驗環境,那些需求已經部署到了正式環境”, “可以做從業務到代碼的整個鏈條的統計分析…”

這一切,豬齒魚已經幫助專案管理者和程式員實作了,在豬齒魚的敏捷管理服務中,可以通過用戶故事、任務、缺陷等直接一鍵創建分支,然后,你可以從git checkout -b 開始愉快而又有挑戰的一天,不僅如此,也可以在分支管理中,將現有的分支關連到用戶故事、任務或者缺陷,

總結

回顧一下我們的目標,簡單、靈活、可視化,以及需求與代碼關連,版本控制一直都是一件說起來容易,做起來難的事情,但是我們做到了,重要的是豬齒魚將這些特點和規則固化到了DevOps流程中,讓我們忘記復雜易錯的操作,把精力放到業務開發上,希望我們的分享能夠給大家帶來幫助,


本文由豬齒魚技術團隊原創,轉載請注明出處

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/426434.html

標籤:其他

上一篇:Stylelint跳過整個檔案夾

下一篇:3個子行程只需要2個wait()

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more