【Git】關于項目開發分支的使用規范

背景

在項目開發過程中,往往一個優秀的產品都會出現不斷的版本迭代,我時常在項目發布后對于如何結合后續更新的業務場景在分支上的應用沒有一個很好的辦法,一直也比較苦惱。目前項目的迭代場景如下,一個A項目,經過需求分析,產品經理下令開發團隊開發,那么經過數月后成功上線,發布V1.0.0.0. 緊接著我們就會進入第二期開發,產品經理會列出第二期的具體開發內容,隨即我們就開干了……,然后在開發過程中,發布出去的V1.0.0.0反饋出很多問題,有業務的,有緊急的,各種情況的問題….

對于上面的問題,我相信很多人都遇到過,如果是你,你會怎么做呢?我先說一下目前我的做法,首先我放棄了主分支概念,當產品經理說我們第一個版本為V1.0.0.0時,我在git上就創建出了分支V1.0.0.0,我以版本為分支的形式來應對。當進入第二期時,我會根據V1.0.0.0的最新commit來創建出一個新分支V1.0.0.1作為下一個版本的開發分支。如果V1.0.0.0反饋有問題,我會立即切回到V1.0.0.1分支上進行開發,測試,然后tag一個新的標簽出來為V1.0.0.0.1 作為修復版本……,然后將代碼合并到V1.0.0.1上繼續開發。

對于上面這種玩法前期還好,后期有一個重大缺點,因為按照版本號創建的分支,所以后期分支會非常多,難以維護,最終會把自己累死。

優點缺點
使用 tag 明確版本分支命名不清晰(既是 1.0.0.0 又包含 1.0.0.1 內容)
tag 打在某個 commit 上是合理的沒有合并到主分支(main),未來不好維護
便于查看歷史提交如果多人協作,容易造成混亂
能記錄版本信息后續修復 bug 不方便追溯

標準版本發布流程

后來基于上面的痛點以及詢問了一些前輩的意見,打算使用如下的一個流程。這是一個 基于 Git 的常見版本管理流程(適用于敏捷開發):

1.分支結構
分支用途說明是否要長期存在
master主分支,用于生產環境代碼長期
dev開發主分支,集成所有功能長期
release/版本號準備發布的版本分支(不加新功能)臨時
hotfix/版本號緊急修復分支(不加新功能)臨時
2.版本開發 & 發布流程圖
develop↓ merge → release/4.1.0.1 → 測試團隊測試↓測試通過 → 打 tag v4.1.0.1↓merge 到 main(或直接部署)↓merge 回 develop(帶回 bug 修復)
3.標準流程
3.1 創建release/版本號 分支

先創建出一個分支release/4.1.0.1

3.2 根據產品經理發布的版本進行開發

dev分支上開發完要求的功能內容

3.3 在release/版本號做最后調整跟測試
  • 開發完成的功能合入 release/4.1.0.1

  • 修復一些小問題(不能加新功能)

3.4 提交給測試部門測試
  • release/4.1.0.1分支提交給測試部門測試
  • 測試完成后確認沒問題
3.5 合并到主分支
  • 合并到master
  • 在最新的commit上打上tag=v4.1.0.1
3.6 合并到開發分支
  • 合并到dev
3.7 刪除release
  • 看一下需要,如果不經常再變動,可以先刪掉。后期如果需要,可以再根據tag標記的位置根據實際情況來新建出/release/版本號
4.如果上線后發現 bug 怎么辦?——打 Hotfix
4.1 創建 hotfix 分支

先基于某一個tag:v4.1.0.1上新建一個緊急分支出來hotfix/4.1.0.1-patch1

4.2 修復 bug 并測試通過
  • hotfix/4.1.0.1-patch1分支提交給測試部門測試
  • 測試完成后確認沒問題
4.4 合并master
  • 合并到master
  • 在最新的commit上打上tag=v4.1.0.1-patch1
4.5 合并到開發分支
  • 合并到dev
4.5 刪除分支
  • 刪除hotfix/4.1.0.1-patch1分支

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87346.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

msquic的windows版本編譯

首先確保安裝cmake和powershell(需要6以上,本人升級到了7.5),vs(本人用的vs2022) powershell,默認是5,會編譯不成功,所以附帶一個升級的流程 $PSVersionTable.PSVersion …

批量文件重命名工具 OncePower ,永久免費!

軟件介紹 適用于Windows OncePower是一款Windows批量重命名工具,支持基本及高級匹配重命名,無需復雜正則。特色包括匹配修改、長度截取、日期命名、前綴后綴修改及TXT文件導入。支持保留特定內容、批量移動文件和刪除空文件夾。可保存設置,…

Python入門Day6.1:異常處理

一、什么是異常(Exception)? 異常是指程序運行過程中出現的錯誤情況。比如: 打開一個不存在的文件0作為除數列表索引越界類型轉換失敗 二、基本結構:try...except try:# 可能出錯的代碼 except 錯誤類型:# 出錯時執…

C++中的標準模板(STL)

C中的核心標準模板包含:容器、迭代器、算法、函數對象、適配器。 1.容器 容器提供了各種數據結構,包括向量(vector)、鏈表(list)、隊列(queue)、棧(stack)、集合(set)、映射(map)等,可以根據實際需求選擇合適的容器。 容器分為三大類&…

excel 待辦日歷軟件(需要宏)特別推薦

Excel待辦日歷軟件是一款基于Excel表格的日程管理工具,能夠幫助用戶更高效地管理待辦事項和日程安排。用戶可以在軟件中創建不同的任務列表,以便更好地進行管理和跟蹤。軟件還提供了日歷視圖,用戶可以直觀地查看和安排每日的任務,…

激活函數-sigmoid、tanh、relu、softmax對比

激活函數是神經網絡的核心組件,用于引入非線性特性,使網絡能夠學習復雜模式。以下從定義、作用、分類及應用場景進行詳細解析: 🔍 ??一、定義?? 激活函數(Activation Function)是作用于神經元輸出的?…

三步走實現嵌入式硬件與軟件開發

目錄 ? 一、嵌入式硬件與軟件的邊界(為你后面每階段安排任務打基礎) ? 二、三階段開發策略規劃(以你的三步走為主線) ??階段1:確定能做 → 外包技術顧問協助選型 + 需求拆解 + 采購建議 適用角色 關鍵目標 如何管理? 工具推薦 ??階段2:會做一些 → 小范圍…

ubuntu運行cursor

一.CURSOR官網下載AppImage文件 https://www.cursor.com/en/download 二、解壓 AppImage 繞過掛載機制 解決:默認使用Cursor.AppImage 會自動掛載臨時目錄在/tmp目錄下,出現沒有權限掛載的報錯問題 若掛載點仍不可寫,直接解壓 AppImage 運…

PTA天梯賽L1 071-080題目解析

目錄 1.L1-071 前世檔案 2.L1-072 刮刮彩票 3.L1-073 人與神 4.L1-074 兩小時學完C語言 5.L1-075 強迫癥 6.L1-076 降價提醒機器人 7.L1-077 大笨鐘的心情 8.L1-078 吉老師的回歸 9.L1-079 天梯賽的善良 10.L1-080 乘法口訣數列 1.L1-071 前世檔案 解析:…

git常用操作 --- idea編譯器 --- 公司實戰版

前言 雖然git的命令方式很靈活,但是還是不夠人性化,不夠方便。 如果對git操作不熟練特別容易犯迷,可能敲一會命令就不知道當前在干什么了,下一步要干什么。 下面,我將演示在Java開發中使用最常用最經典的idea編譯器來進行git操作,非常人性化和方便。 如果沒有安裝git和初始…

window顯示驅動開發—流輸出階段

流輸出 (SO) 階段可以在這些頂點到達光柵器之前將頂點流式傳輸到內存。 流輸出的運行方式類似于管道中的點擊。 即使數據繼續向下流向光柵器,也可以打開此點擊。 通過流輸出發送的數據連接到緩沖區。 這些緩沖區可以在后續傳遞上作為管道輸入進行循環。 流輸出的一…

備份docker desktop中的opengauss數據庫

文章目錄 備份docker desktop中的opengauss數據庫一、前提條件二、備份步驟三、注意事項四、自動化備份(可選)五、驗證備份 備份docker desktop中的opengauss數據庫 ? 以下是在 Docker Desktop 中備份 OpenGauss 數據庫(以你的環境為例&…

實時中值濾波 + 低通濾波 示例程序(STM32環境)

一、功能概述 本示例實現兩個濾波器: 中值濾波器(Median Filter):對短期異常值(如尖峰噪聲)有良好的抑制能力;低通濾波器(Low-Pass Filter):對數據進行平滑…

AtCoder Beginner Contest 409 題解

本文為AtCoder Beginner Contest 409 的詳細題解 目錄 題目A: 題目大意: 解題思路: 代碼(C): 題目B: 題目大意: 解題思路: 代碼(C): 題目C: 題目大意: 解題思路: 代碼(C): 題目D: 題目大意: 解題思路: 代碼(C): 題目E: 題目大意: 解題思路: 代碼(C): 題目A…

Spring @Environment 典型用法

簡單說:Spring 里沒有直接叫 Environment 的注解,更準確說常用的是 Autowired 注入 Environment 對象,或者結合 Value 配合 Environment 讀取配置 。 支持從以下來源讀取: 1、application.properties / .yaml 2、JVM 參數&#xf…

【集合與結構體】5.2(課本題)總結代碼

ds老師產物&#xff0c;純為期末復習&#xff0c;自用。 題目1 編寫程序&#xff0c;將一個整型變量右移 4 位&#xff0c;并以二進制數形式輸出該整數在移位前和移位后的數值。 //觀察系統填補空缺的數位情況 代碼解答 #include <iostream>//編寫程序&#xff0c;將一個…

16.max/min最大最小值函數

1.基本使用 max/min函數返回滿足where條件的一列的最大/最小值。 select max(column_name)|min(column_name) from table_namewhere where_definition 示例&#xff1a; ①求班級總分的最高分 #求班級總分的最高分 SELECT MAX(math_scorechinese_scoreenglish_score)AS 總分…

需要做一款小程序,用來發券,后端如何進行設計能夠保證足夠安全?

溫馨提示&#xff1a;本文由ai生成&#xff0c;請辨別閱讀&#xff0c;本文僅提供一種思考的方式和設計思路 設計一個安全的后端系統&#xff0c;用于發放優惠券的小程序&#xff0c;需要考慮多個安全層面&#xff0c;包括身份驗證、數據安全、API 安全、以及防止常見攻擊&…

ACM設計平臺-核心模塊解析-趙家康

負責模塊解析-趙家康 一、Login.vue 功能邏輯、數據綁定、表單驗證、與后端交互 Vue 登錄頁面的代碼設計 代碼功能概覽 代碼實現了一個典型的登錄頁功能&#xff0c;核心包括&#xff1a; 表單輸入&#xff08;學號、用戶名、密碼、驗證碼&#xff09; 驗證碼生成與校驗 勾…

在 VMware (WM) 虛擬機上安裝的 Ubuntu 22.04 分配了 20GB 磁盤,但僅使用 10GB 就顯示 “空間已滿“

可能原因及解決方案 虛擬機磁盤未實際擴容&#xff08;僅調整了虛擬大小&#xff09; 現象&#xff1a;在 VMware 里調整了磁盤大小&#xff08;如 20GB → 50GB&#xff09;&#xff0c;但 Ubuntu 內部仍只識別 10GB。 原因&#xff1a;VMware 調整的是虛擬磁盤上限&#xf…