1. 程式人生 > >版本控制與常見的分支模型

版本控制與常見的分支模型

一直為軟體版本釋出困擾,開發人員需要不斷前進完成功能,測試人員在後面緊跟測試,售後人員需要穩定版本上線,三者間沒有達成統一的認識,產品或者專案到底怎樣才算穩定版本。

目前公司配置管理在策略上採用的是不穩定主幹(unstable trunk) 模式,所有的專案都在同一主幹上進行修改,在每次上線後並沒有明確的stable分支版本,基本上是靠測試人員TAG程式碼來管理維護的。

問題:

   1)、多個專案組開發人員都可能併發對同樣程式碼進行修改,造成了嚴重的程式碼衝突問題。例如張三修改了a.java並上QA測試伺服器,在QA測試過程中, 李四也對a.java進行修改並上QA,李四的程式碼覆蓋了張三的程式碼。由於是SCM人員並不清楚程式碼衝突情況,這樣張三和李四的程式碼上QA很容易相互影響 並很難查具體原因

   2)、由於沒有明確stable分支版本,導致上QA、上生產只能採用增量更新,上QA、上生產出問題後的程式碼回滾很麻煩,嚴重影響了測試、上線效率。對於生產環境執行的程式碼的具體版本並沒有明確的管理,導致生產系統出問題後要排查問題也很難查。

   3)、由於核心基礎包沒有與上層應用隔離,導致大家都會對核心包進行修改,修改後程式碼質量並沒有有效控制。於是出現因為修改基礎包影響整個系統功能等現象

如何避免,至少要從如下幾個方面來:

  1)、分支管理策略:採用適當的分支管理策略來保證開發庫、測試庫、釋出庫的隔離

  2)、適當引入每日編譯、持續整合、Code Review等敏捷開發的最佳實踐

  3)、採用自動化指令碼完成上QA、上生產的部署工作,避免人工失誤

  4)、對核心框架、後臺應用、前端頁面開發採用不同的配置管理策略


版本管理的策略:不穩定主幹策略、穩定主幹策略、敏捷釋出策略。

下面是對這幾種策略的摘錄:

不穩定主幹策略

image

  1. 使用用主幹作為新功能開發主線,分支用作釋出。
  2. 被廣泛的應用於開源專案。
  3. 比較適合諸如傳統軟體產品的開發模式,比如微軟的office等。
  4. bug修改需要在各個分支中合併。
  5. 新程式碼在主幹上開發,因此如果主幹不能達到穩定的標準,就不可以進行釋出。
  6. 這種策略的好處是沒有分支合併的工作量,因此比較簡單。

穩定主幹策略

image

  1. 使用主幹作為穩定版的釋出。
  2. bug的修改和新功能的增加,全部在分支上進行。
  3. 不同的修改或新功能開發以分支隔離。
  4. 分支上的開發和測試完畢以後才合併到主幹。
  5. 主幹上的每一次釋出都做一個標籤而不是分支。
  6. 每次釋出的內容調整起來比較容易。
  7. 缺點是分支合併所增加的成本。

敏捷釋出策略

image

  1. 敏捷開發模式的專案中廣泛採用,敏捷開發的專案具有固定的釋出週期。
  2. 為每個task建立分支。
  3. 為每個釋出建立分支,每個週期內的task分支需要合併到釋出分支釋出。
  4. 在完成釋出後,釋出分支的功能合併到主幹和尚在進行的任務分支中。
  5. 一種穩定主幹策略的變體。
  6. 團隊成員要求較高。

團隊當前情況

  1. 負責網際網路產品的開發,釋出更新較為頻繁。
  2. 有固定的釋出週期,同時也存在比較多的hotfix。
  3. 修改任務通常比較小,改動範圍通常不大,時間通常較短。
  4. 不同的功能頁面有不同的小組負責,耦合度相對較低。
  5. 團隊目前沒有采用分支策略,開發人員協商進行增量更新,出現錯誤的機率較高。
  6. 已使用SVN版本控制工具。

初步實踐

參考上述策略,結合當前團隊的現狀,初步設計了下面的版本控制解決方案。

image

此方案已穩定主幹策略為主結合了一些敏捷釋出策略的思路,具體實施方案如下:

1、主幹時刻處於穩定狀態,隨時可以釋出。設SCM人員對主幹程式碼進行管理,普通開發人員只讀。

2、SCM為開發任務建立開發分支。常規的可以以小組為單位建立分支,較大的任務可以建立專門的分支。

3、在釋出日,從主幹複製一個測試分支,需要在本釋出日釋出的各開發分支向此測試分支合併。

4、對測試分支程式碼進行測試,出現bug在測試分支上更改,無誤後釋出。

5、測試分支程式碼釋出後,合併入主幹,並在主幹上進行標記。

6、對緊急修復(Hotfix)的情況,可以從主幹複製出測試分支,在測試分支上進行緊急修改,並在測試後釋出,釋出後同樣將程式碼合併會主幹,做標記。

7、 Hotfix僅限於可以很快解決的小問題,如果更改時間過長,則需採用常規方法完成。

8、如果在測試分支測試過程中需要hotfix工作,則在複製一個新的測試分支進行hotfix,測試後釋出。然後同時合併入原測試分支和主幹,並在主幹上做標記。此過程未在上圖中畫出。

9、測試分支釋出後,開發分支可以刪除;測試分支合併入主幹後,測試分支可以定期刪除。

方案的優缺點

方案優點

1、解決了沒有實施分支策略時,程式碼不能經常簽入的問題。

2、主幹程式碼始終處於穩定的狀態隨時可以釋出,降低了風險。

3、可以基於一個完整的測試分支進行測試及釋出,而不是以口口相傳的方式增量更新。

方案缺點

1、建立分支、合併分支增加了工作量。考慮實際情況,以及版本控制工具的輔助,增加的工作量應該可以接受。

2、如果某些開發分支工期跨越多個釋出週期,修改過於劇烈,合併分支時可能工作量較大。可以考慮分解任務,避免過大的任務出現。

3、在同一時間最好只有一個測試分支,因此建立測試分支的許可權需要限制,除hotfix場景外應當避免。

參考:

淘寶網最佳實踐之ABS自動編譯

相關推薦

版本控制常見分支模型

一直為軟體版本釋出困擾,開發人員需要不斷前進完成功能,測試人員在後面緊跟測試,售後人員需要穩定版本上線,三者間沒有達成統一的認識,產品或者專案到底怎樣才算穩定版本。 目前公司配置管理在策略上採用的是不穩定主幹(unstable trunk) 模式,所有的專案都在同一

分散式版本控制系統Git------分支管理合併(mergerebase)

零、需要使用到的命令:        git branch                                  檢視當前分支。        git branch <name

jQuery 版本選擇常見插件庫總結

http 流行 開發人員 方便 blog 地址 而是 百度 中文 在日常的開發中jQuery作為一個流行多年的輕量級 JavaScript 庫,使用十分的普遍,主要源於它的便捷性和實用性非常高。 在此總結一些關於jQuery版本的區別和選擇的建議,以及一些常見插件庫的網

SVN版本控制——主線、分支、標記篇

   新建資源倉庫時,可選擇預設建立三個資料夾。這三個資料夾分別是【trunk】【branches】【tags】 【Trunk】      一般用於存放目前專案主線,也就是專案所有功能模組的集合體,一整個專案所有程式碼庫。一般

Github版本控制git checkout命令的使用

    Github的作用實在是太多了,版本控制、程式碼託管、協作開發、基友社交等等。我們今天就來介紹下如何使用Github release來進行版本控制。 (3)在Github上釋出一個版本,直接點選上方的release即可,也就是你要“備份”的某一個版本。 。 (4

git版本控制Android studio配合使用

專案開發中常用的專案管理工具SVN和git,最近公司搭建了一臺git伺服器來同意管理程式碼,經過研究對git的一些常用功能做一個記錄,方便以後查閱。主要配合Android studio使用,本文記錄的主要的功能有:git的設定,提交原生代碼到遠端程式碼伺服器,git與And

net core webapi多版本控制swagger(nswag)配置

前言 首先希望webapi 支援多版本,swagger針對不同的版本可進行互動。多版本控制基於Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer 包,swagger可以選擇Swashbuckle.AspNetCore和nswag.AspNetCo

持續交付中的分支管理版本控制

現在,越來越多的專案使用Git作為版本控制的工具,通過Git來進行分支和Tag管理,但大多數情況這個過程都由手工完成,缺乏相應的規範,對於分支和版本號的控制也很隨意,出現這樣的情況往往是大家對軟體交付過程中的軟體版本控制不夠重視,“只要確保軟體是最新的版本即可”,甚至是專案管

IAM簡介常見的訪問控制模型

1.IAM IAM,Identity and Access Management 的縮寫,即“身份識別與訪問管理”。IAM是一套全面的建立和維護數字身份,並提供有效地、安全地IT資源訪問的業務流程和管

基於GitLabGit Extensions搭建版本控制工具

基本 cmd img html nat 需求 無法 spa hang 1.背景   大家知道GitHub是現在非常流行的代碼托管工具,但是如果有些項目不想開源的話,則需要付費,因此萌生了自己搭建一個Git的版本控制工具,供內網使用。GitLab則是個好的選擇,但是GitL

Git版本控制:Git分支處理

rgb 方法 發現 速度 pip 命令 ria p s 你會 http://blog.csdn.net/pipisorry/article/details/46958699分支的意義創建分支能夠避免提交代碼後對主分支的影響,同一時候也使你有了相對獨立的開發環境。假設你準備

Git 分支模型開發規範

work 所有 upload git 分支 -a 最新 push wechat let 01、分支模型 master:長期分支,一般用於管理對外發布版本,每個 commit 對一個 tag,也就是一個發布版本 develop:長期分支,一般用於作為日常開發匯總,

IDEA中 GITSVN版本控制插件的切換

img image 項目 XML 插件 .com 直接 .cn 版本 IDEA同一個項目中,有時候會用到 GIT 有時候 也會用到 SVN 在IDEA中,沒有按鈕可以直接切換的,所以可以直接修改 .IDEA 文件夾中的XML配置文件, 不需要重啟喔,直接在IDEA

1.git版本控制工具的安裝使用

use ssh-key origin read name log -- cache 本地倉庫 git下載 官方地址:https://git-scm.com/download/win 百度雲地址:我的網盤/安裝文件/Git-2.15.0-64-bit.rar git基本使

iOS - Git 分支(分布式版本控制系統)

可變 顯示 starting 強制 under 有意 方案 添加 ive 前言 幾乎所有的版本控制系統都以某種形式支持分支。使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線。在很多版本控制系統中,這是一個略微低效的過程——常常需要完全創建一個源代碼目錄

SVN版本控制服務 搭建使用

export 獲得 系統 最新 資料 只讀 ESS 配置文件 代碼 SVN簡介 SVN是一個開源的版本控制系統,SVN管理著隨時間改變的數據。這些數據放置在一個中央資料檔案庫中,這個檔案庫很像一個普通的文件服務器,不過它會記住每一次文件的改動。 SVN的概念: re

分布式版本控制系統Git的安裝使用

com tps egit status 單行 git倉庫 查看 下載 組合 作業要求: https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2103 1.下載安裝配置用戶名和郵箱。 2. 創建工作目

作業二 分布式版本控制系統Git的安裝使用

left -- 並排 ssh d+ 個人 sta 命令顯示 單行 作業的要求來自於:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 第一步:配置用戶和郵箱

隨筆 | 分布式版本控制系統Git的安裝使用

鏈接 遠程倉庫 git push 系統 遠程 idt kkk engine notepad 作業要求來自https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 GitHub遠程倉庫的地址https://git

第二次作業:分布式版本控制系統Git的安裝使用

tty tps ssh-key 第二次作業 版本信息 公鑰 mail d+ data- 作業的要求來自於:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 遠程倉庫的地址:https://github.