發版混亂怎么規范

你是否經歷過這種場景:臨到發版,一堆功能代碼擠在一起,測試分不清范圍,修復一個Bug可能引發三個新Bug?發布過程像一場豪賭?

問題的核心往往在于分支策略和流程的混亂。今天,我們就來建立一套在絕大多數場景下都簡單、清晰、高效的代碼管理標準。

一、核心目標:我們要解決什么?
  1. 主線穩定:確保主分支的代碼隨時可以發布到生產環境。

  2. 并行開發:讓多個功能開發互不干擾。

  3. 發布清晰:清楚地知道這次發布包含了什么,出了問題能快速定位和回滾。

  4. 簡化流程:規則越簡單,越容易執行,越不容易出錯。

二、極簡分支策略:兩條主線 + 功能分支

忘掉那些復雜的分支模型。對于90%的項目,你只需要兩種長期存在的主分支和一種臨時分支:

分支類型誰用?作用禁忌
主分支 (Main/Master)所有人神圣不可侵犯。它始終與生產環境運行的代碼完全一致。嚴禁直接推送代碼。唯一來源是合并請求。
開發分支 (Develop)開發者新功能集成的大本營。這里的代碼是下一個版本的預覽。不要從這里直接發版。
功能分支 (Feature)單個開發者從?develop?拉取,用于開發一個新功能或修復。生命周期要短,完成必須合并刪除。

怎么操作?

  • 所有新功能開發,都必須從最新的?develop?分支切出一個新的功能分支

  • 分支命名要有意義,例如:feature/user-payment?或?fix/login-issue

三、核心流程:如何執行?

整個流程的核心是?“切新分支開發”?和?“合并請求(Pull Request)”

1. 開發新功能流程

記住:一個功能,一個分支,一個合并請求。

  1. 準備:基于最新的?develop?分支,切出新分支?git checkout -b feature/awesome-new-thing develop

  2. 編碼:在你的功能分支上專心工作,頻繁提交。

  3. 提審:完成后,發起一個到?develop?分支的合并請求(Pull Request)

  4. 審查

    • 必須有同事審查你的代碼。

    • 必須有自動化工具(CI)檢查你的代碼:能否成功編譯?單元測試是否都通過?代碼風格是否符合規范?

    • CI檢查不通過,絕對禁止合并!

  5. 集成:審查通過,CI全綠,才能將功能分支合并回?develop

  6. 清理:合并成功后,立即刪除這個功能分支。保持倉庫整潔。

2. 發布版本流程(這是關鍵!)

當?develop?分支集成了足夠的功能,準備發布一個新版本時:

  1. 啟動發布:從?develop?分支切出一個發布分支,以版本號命名,例如?release/v1.2.0

    • 問:為什么不用develop直接發?答:為了隔離。發布前的最終測試和修復可能會產生新的提交,我們不想影響正在開發下一個版本的人。

  2. 測試與修復:QA團隊只測試這個?release/v1.2.0?分支。發現的所有Bug,都在這個發布分支上修復

  3. 發布上線

    • 測試通過后,將?release?分支合并到?main?分支。

    • 至關重要的一步:在?main?分支上打一個標簽(Tag),標簽名就是版本號?v1.2.0。這個Tag就是你發布和回滾的精確坐標。

    • 將?release?分支也合并回?develop?分支,確保修復的Bug在后續開發中也不會再現。

  4. 部署:將打上Tag的?main?分支代碼部署到生產環境。

  5. 清理:刪除發布分支?release/v1.2.0

3. 修復線上緊急Bug

線上出現緊急Bug,需要立刻修復怎么辦?

  1. 基于主分支修復:從?main?分支的最新Tag(比如?v1.2.0)切出一個熱修復分支,例如?hotfix/critical-payment-bug

  2. 快速修復:在這個分支上以最快速度修復問題并測試。

  3. 緊急發布

    • 將修復好的?hotfix?分支合并到?main,并打上新Tag?v1.2.1

    • 同樣至關重要:將?hotfix?分支也合并回?develop,確保修復不會丟失。

  4. 部署:部署新Tag?v1.2.1?到生產環境。

  5. 清理:刪除熱修復分支。

四、如何堅決避免發版混亂?—— 三大紀律
  1. 主分支保護原則main?分支是“王冠”,必須設置成保護分支。任何代碼只能通過合并請求進來,且合并請求必須通過CI檢查和至少一個同事的審查。封死直接推送的后門

  2. 功能原子化原則:一個合并請求只做一件事(一個功能或一個修復)。堅決反對把多個不相關的修改放在一個分支里提交。這樣代碼審查范圍清晰,回滾風險低。

  3. 標簽化發布原則永遠只部署打了Tag的代碼。Tag就是你的快照。出了問題,一分鐘就能回滾到上一個Tag的版本。嚴禁直接部署某個分支的最新代碼。

總結

這套規范的核心就是:

  • 開發在?功能分支?→ 集成到?develop

  • 發布時用?發布分支?隔離測試 → 穩定的代碼合并到?main?并打Tag

  • 修復從?main?的Tag切?熱修復分支?→ 修復后合并回?maindevelop

規則簡單,關鍵在于嚴格執行。尤其是保護主分支打Tag這兩個動作,是避免混亂的生命線。

操作目的常用 Git 命令
拉取最新代碼git pull origin <branch_name>
創建/切換分支git checkout -b <new_branch_name>
提交更改git add .?git commit -m "message"
推送分支git push -u origin <branch_name>?(首次)?git push?(后續)
合并分支git merge <source_branch>
打版本標簽git tag -a <tag_name> -m "message"
推送標簽git push origin <tag_name>
刪除本地分支git branch -d <branch_name>
刪除遠程分支git push origin --delete <branch_name>

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

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

相關文章

【golang長途旅行第30站】channel管道------解決線程競爭的好手

channel 為什么需要channel 使用全局變量加鎖同步來解決goroutine的競爭&#xff0c;可以但不完美難以精確控制等待時間?&#xff08;主線程無法準確知道所有 goroutine 何時完成&#xff09;。全局變量容易引發競態條件?&#xff08;即使加鎖&#xff0c;代碼復雜度也會增加…

蘋果XR芯片介紹

蘋果的 XR 芯片技術主要體現在 A 系列、M 系列處理器以及專為空間計算設計的 R1 協處理器中。以下從技術架構、產品迭代和綜合對比三個維度展開分析&#xff1a;一、技術架構解析1. A 系列芯片&#xff08;以 A12 Bionic 為例&#xff09;制程工藝&#xff1a;7nm&#xff08;臺…

達夢數據庫巡檢常用SQL(三)

達夢數據庫巡檢常用SQL(三) 數據庫SQL運行檢查 數據庫SQL運行檢查 死鎖的事務情況: SELECT TO_CHAR(HAPPEN_TIME,YYYY-MM-DD HH24:MI:SS) HAPPEN_TIME,SQL_TEXT FROM V$DEADLOCK_HISTORY WHERE HAPPEN_TIME >DATEADD(DAY,-30,

基于SpringBoot的校園周邊美食探索及分享平臺

1. 項目簡介 項目名稱&#xff1a;校園周邊美食探索及分享平臺 項目背景&#xff1a;針對校園師生對周邊美食信息的需求&#xff0c;構建一個集美食推薦、鑒賞、評論互動及社交功能于一體的平臺&#xff0c;幫助用戶發現優質美食資源并進行分享交流。 主要目標&#xff1a; 提供…

Go數據結構與算法-常見的排序算法

雖然看過別人寫了很多遍&#xff0c;而且自己也寫過很多遍&#xff08;指的是筆記&#xff09;&#xff0c;但是還是要寫的就是排序算法。畢竟是初學Go語言&#xff0c;雖然之前寫過&#xff0c;但是還是打算再寫一遍。主要包括插入排序、選擇排序、冒泡排序、快速排序、堆排序…

第 6 篇:目標規則與負載均衡 - `DestinationRule` 詳解

系列文章:《Istio 服務網格詳解》 第 6 篇:目標規則與負載均衡 - DestinationRule 詳解 本篇焦點: 深入理解 DestinationRule 的核心作用:定義流量在到達目的地之后的行為。 詳細剖析其三大核心功能:服務子集 (Subsets), 流量策略 (Traffic Policy), TLS 設置。 動手實戰…

一個簡潔的 C++ 日志模塊實現

一個簡潔的 C 日志模塊實現 1. 引言 日志功能在軟件開發中扮演著至關重要的角色&#xff0c;它幫助開發者追蹤程序執行過程、診斷問題以及監控系統運行狀態。本文介紹一個使用 C 實現的輕量級日志模塊&#xff0c;該模塊支持多日志級別、線程安全&#xff0c;并提供了簡潔易用…

C語言---數據類型

文章目錄數據類型分類1. 基本類型 (Basic Types)a. 整數類型 (Integer Types)char (字符型)int (整型)short (短整型)long (長整型)long long (C99標準引入)圖片匯總b. 浮點類型 (Floating-Point Types)float (單精度浮點型)double (雙精度浮點型)long double (長雙精度浮點型)…

本搭建烏云漏洞庫

1.下載鏡像站文件&#xff0c;并拖入虛擬機 2.將bugs.rar解壓至網站根目錄下 /var/www/html 3.配置bugs/conn.php 4.在bugs下創建upload目錄&#xff0c;將10-14、15-a、15-b、16壓縮包文件解壓到該upload目錄 5.把wooyun.rar解壓到 /mysql/data/wooyun目錄下 6.配置hosts文件后…

Vmware虛擬機 處理器配置選項配置介紹

1. 處理器配置選項好&#x1f44c;&#xff0c;我來幫你逐一解讀 VMware 里 虛擬機處理器 這些選項的含義。 你截的圖里&#xff0c;主要有三塊內容&#xff1a; 處理器數量 每個處理器的內核數量 ©虛擬化引擎1?? 處理器數量 這是分配給虛擬機的 邏輯 CPU 插槽數。一般…

day40-tomcat

1.每日復盤與今日內容1.1復盤keepalived高可用配置搶占式與非搶占式腦裂keepalived處理Nginx掛掉1.2今日內容部署、安裝、配置tomcat(systemctl)Tomcat主配置文件部署靜態頁部署zrlog&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;接入負載均衡掛載到NFS2…

【RA-Eco-RA4E2-64PIN-V1.0 開發板】步進電機的串口控制

【RA-Eco-RA4E2-64PIN-V1.0 開發板】步進電機的串口控制 本文介紹了 RA-Eco-RA4E2-64PIN-V1.0 開發板通過串口指令實現 28BYJ-48 步進電機旋轉角度和速度的精確控制的項目設計。 項目介紹 硬件連接&#xff1a;28BYJ-48 步進電機、ULN2003 驅動板、Jlink 調試器、供電電源等&am…

PiscCode基于 Mediapipe 的人體多模態關鍵點檢測與可視化系統 —— HumanMultiLandmarker 深度解析

一、引言 在計算機視覺領域&#xff0c;人體關鍵點檢測&#xff08;Human Pose Estimation&#xff0c;HPE&#xff09;一直是研究和應用的熱點方向之一。隨著深度學習與實時圖像處理技術的發展&#xff0c;人體姿勢估計已經從傳統的 2D 檢測走向了 3D 空間建模&#xff0c;并…

文獻閱讀筆記【物理信息機器學習】:Physics-informed machine learning

文獻閱讀筆記&#xff1a;Physics-informed machine learningSummaryResearch ObjectiveBackground / Problem Statement問題背景研究現狀需解決的問題問題出現的原因分析問題解決思路Method(s)問題建模作者解決問題的方法/算法1. 觀測偏差&#xff08;Observational Biases&am…

Linux服務環境搭建指南

實驗拓撲概述**實驗拓撲&#xff1a; APPSRV&#xff1a; 主機名&#xff1a;appsrv.example.com ip地址&#xff1a;192.168.100.10 網關&#xff1a;192.168.100.254 網卡為NAT模式 STORAGESRV&#xff1a; 主機名&#xff1a;storagesrv.example.com ip地址&#xff1a;192.…

[特殊字符] 數據庫知識點總結(SQL Server 方向)

一、數據庫基礎概念數據庫&#xff08;Database&#xff09;&#xff1a;存儲和管理數據的容器。數據表&#xff08;Table&#xff09;&#xff1a;以行和列形式組織數據。行&#xff08;Row&#xff09;&#xff1a;一條記錄。列&#xff08;Column&#xff09;&#xff1a;字…

【PSINS工具箱】MATLAB例程,二維平面上的組合導航,EKF融合速度、位置和IMU數據,4維觀測量

文章目錄關于工具箱程序簡介代碼概述核心功能與步驟運行結果MATLAB代碼關于工具箱 本文所述的代碼需要基于PSINS工具箱&#xff0c;工具箱的講解&#xff1a; PSINS初學指導&#xff1a;https://blog.csdn.net/callmeup/article/details/137087932 本文為二維平面上的定位&am…

MiMo-VL 技術報告

摘要 我們開源了 MiMo-VL-7B-SFT 和 MiMo-VL-7B-RL 兩個強大的視覺語言模型,它們在通用視覺理解和多模態推理方面均展現出最先進的性能。MiMo-VL-7B-RL 在 40 項評估任務中的 35 項上優于 Qwen2.5-VL-7B,并在 OlympiadBench 上獲得 59.4 分,超越了參數量高達 780 億的模型。…

CTFshow Pwn入門 - pwn 19

先看main函數&#xff1a;fclose(_bss_start) fclose(stdout) 關閉了默認fd1的輸出&#xff0c;所以system的結果無法直接看到。 思路&#xff1a; 輸出重定向。 ls 1>&0 ls >&0 ls >&2 ###三種寫法均可將輸出重定向到能回顯的終端并獲得一個新的交互…

Redis(以Django為例,含具體操作步驟)

簡介Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的內存數據結構存儲系統&#xff0c;支持多種數據結構&#xff08;如字符串、哈希、列表、集合、有序集合等&#xff09;&#xff0c;可用作數據庫、緩存或消息隊列。其核心特點包括&#xff1a;高性能&am…