分享一份小團(tuán)隊的 Git 協(xié)作規(guī)范

本文內(nèi)容全原創(chuàng)手打橘忱,希望大家可以喜歡赴魁,文末附上個人覺得有價值的參考。

為了能夠科學(xué)有序钝诚、簡單可靠地維護(hù)項目的代碼倉庫和歷史版本尚粘,基于目前主流、成熟的Git工作流形式敲长,考慮項目和團(tuán)隊的實際情況,編寫此規(guī)范秉继;
希望同時可以提升開發(fā)團(tuán)隊日常工作的效率和質(zhì)量祈噪,使每個人能夠熟悉標(biāo)準(zhǔn)化的合作方式,增強(qiáng)團(tuán)隊的凝聚力和面對復(fù)雜場景的處理能力尚辑;

分支類型的約定

master

命名:master
永久分支辑鲤;
用于記錄已上線的穩(wěn)定代碼 ;
通過合并release分支獲取提交杠茬,通過tag等方式記錄版本信息月褥;
當(dāng)master有了新的提交時將提交合并到所有develop分支;

release

命名:release
永久分支瓢喉;
用于待上線版本代碼的合并宁赤、測試和修復(fù);
接受兩種代碼提交:合并次級開發(fā)分支develop上已通過測試并確認(rèn)即將發(fā)版的提交栓票、臨時修復(fù)已上線版本bug的提交决左;
代碼上線發(fā)版后,將代碼合并到master分支走贪;

develop

命名:dev_branch_name
長期分支佛猛;
用于項目主要業(yè)務(wù)需求的開發(fā)、測試和bug修改坠狡;
根據(jù)業(yè)務(wù)需求任務(wù)線的劃分決定此類分支的數(shù)量继找,如跑團(tuán)、直播逃沿、保險婴渡、公共幻锁;
根據(jù)上線時間等因素決定分支建立時的父節(jié)點(diǎn)來自master還是已經(jīng)存在的develop分支;
在通過測試并確認(rèn)將要上線后缩搅,將代碼合并到release分支越败,任務(wù)線結(jié)束后刪除此分支;

feature

命名:feat_branch_name
臨時分支硼瓣;
用于開發(fā)實驗性或小任務(wù)量的業(yè)務(wù)模塊究飞,根據(jù)需要基于master或相關(guān)develop分支創(chuàng)建;
開發(fā)完成后合并到release或?qū)?yīng)的develop分支堂鲤,并刪除此feature分支亿傅;

fixbug

命名:fix_branch_name
臨時分支;
用于線上版本bug的修復(fù),基于master創(chuàng)建瘟栖;
修復(fù)結(jié)束后合并到release分支葵擎,然后刪除此分支;

分支合作的流程

直線段表示從父節(jié)點(diǎn)新建分支半哟,曲線段表示合并操作酬滤;

上線版本的維護(hù)流程

日常開發(fā)測試的流程

提交信息的格式

type :[scope:] subject [#bugIndex]
// 空行
[description]

type

說明本次代碼提交的類型,使用以下幾種前綴表示:
merge 合并其他分支的代碼寓涨;
**dev **業(yè)務(wù)或功能模塊的階段性提交盯串;
**fix **修復(fù)測試流程中發(fā)現(xiàn)的bug,或開發(fā)過程中發(fā)現(xiàn)的過去的bug(測試中的bug使用dev前綴)戒良;
refactor 對代碼進(jìn)行重構(gòu)優(yōu)化体捏,沒有增加新功能或者修復(fù)bug;
**build **改變build.gradle等構(gòu)建系統(tǒng)的文件內(nèi)容糯崎,改變項目的依賴庫几缭、調(diào)試工具等;
**test_on **為了測試而改變了某些代碼邏輯或環(huán)境配置沃呢;
**test_off **還原為了測試而改變的代碼邏輯或環(huán)境配置年栓;

scope

本次提交涉及的代碼或業(yè)務(wù)功能的范圍,與后面內(nèi)容用冒號隔開;

subject

本次提交的概要說明薄霜;
除了fix類型的提交以外應(yīng)該使用祈使句韵洋,簡要明確地表達(dá)清楚提交的內(nèi)容,結(jié)尾無需添加標(biāo)點(diǎn)黄锤;

bugIndex

JIRA上的bug編號搪缨,當(dāng)此提交是用來解決某個JIRA上的bug時,必須在提交標(biāo)題中標(biāo)明鸵熟,如 “ #1600”副编;

空行

用于分隔提交的標(biāo)題和詳細(xì)內(nèi)容;

description

用于記錄一些細(xì)節(jié)流强,例如標(biāo)題中沒能說清楚的任務(wù)細(xì)節(jié)痹届,需要記錄的重難點(diǎn)邏輯或更新呻待;

示例

dev:設(shè)計改版:更新首頁文案
dev:微服務(wù)-自助理賠:界面開發(fā),邏輯優(yōu)化

1队腐,修正未勾選協(xié)議的彈窗時機(jī)
2蚕捉,完成待上傳資料的設(shè)計改版
dev:消息中心-保單簽收:數(shù)據(jù)加載失敗,未顯示“點(diǎn)擊加載”(娟)#1781
dev:泰愛牙:我的預(yù)約列表 #1622 #1633 #1721 #1722
fix:首頁:banner加載延遲
merge:微服務(wù)一期優(yōu)化
merge:release-v2.0.13
//注:此格式用于master合并release分支
build:更新gradle版本為3.4.1柴淘,修復(fù)產(chǎn)生的問題
build:更新依賴庫:butternife迫淹,rxandroid
release:v2.0.13 優(yōu)化運(yùn)營體驗
//注:此格式用于release
release:v2.0.11 跑團(tuán)內(nèi)容更新

1,修復(fù)多臺機(jī)器間數(shù)據(jù)同步的問題
2为严,新增歷史數(shù)據(jù)多天上傳功能
3敛熬,支持界面外部打開,去賬號小改
refactor:優(yōu)化安裝包大小

1第股,刪除重復(fù)或無用的圖片資源
2应民,移除不再使用的running_group模塊
test_on:關(guān)閉人臉識別校驗
test_off:打開人臉識別校驗

版本倉庫的維護(hù)

分支操作權(quán)限

release、master分支相關(guān)的操作由版本庫的維護(hù)人員執(zhí)行夕吻;
develop诲锹、fixbug分支的建立和刪除由開發(fā)者與版本庫的維護(hù)人員溝通后執(zhí)行;
feature分支的操作由開發(fā)者與同一任務(wù)線的組員溝通后執(zhí)行涉馅;
本地分支根據(jù)個人需要建立辕狰,不做限制;
推送到服務(wù)器的分支必須符合命名規(guī)范控漠,在分支任務(wù)結(jié)束后及時刪除;

新建分支場景

  1. 開始新業(yè)務(wù)模塊的開發(fā)任務(wù)悬钳;
  2. 同一任務(wù)線中的內(nèi)容計劃為分批次發(fā)布到生產(chǎn)環(huán)境盐捷;

例如任務(wù)分為一期和二期上線,一期開發(fā)完成并開始測試默勾,為了不影響進(jìn)度碉渡,在一期測試過程中同時需要進(jìn)行二期的開發(fā)。由于二期的開發(fā)需要基于一期母剥,并且需要保證一期可以脫離二期進(jìn)行測試和上線滞诺,所以需要以一期為基礎(chǔ)新建二期的分支。

版本發(fā)布后在release分支上打標(biāo)簽环疼,在master分支合并release

  • 標(biāo)簽打在release分支用于打包發(fā)版的提交上习霹,格式示例如下:

1 標(biāo)簽名:

v2.0.11

2 標(biāo)簽信息:

v2.0.11 跑團(tuán)內(nèi)容更新

1,修復(fù)多臺機(jī)器間數(shù)據(jù)同步的問題
2炫隶,新增歷史數(shù)據(jù)多天上傳功能
3淋叶,支持界面外部打開,去賬號
  • master合并release伪阶,禁用快速前進(jìn)煞檩,產(chǎn)生的新提交格式如下:
merge:release-v2.0.11 跑團(tuán)內(nèi)容更新

1处嫌,修復(fù)多臺機(jī)器間數(shù)據(jù)同步的問題
2,新增歷史數(shù)據(jù)多天上傳功能
3斟湃,支持界面外部打開

維護(hù)人員的維護(hù)內(nèi)容

檢查各分支的建立是否符合規(guī)范熏迹,能否合理地滿足業(yè)務(wù)需要;
檢查服務(wù)器上的分支是否都在使用凝赛,清理沒有價值的分支注暗;
當(dāng)develop分支開發(fā)任務(wù)結(jié)束后,將分支內(nèi)容合并到release分支哄酝,對于不容易理解友存、處理的沖突必須與開發(fā)人員進(jìn)行溝通后操作;
記錄release分支對其他分支的每次合并陶衅,在合并的提交信息中說明合并的內(nèi)容屡立、遇到的問題等信息;
在新版本發(fā)布后將release合并到master搀军;
在運(yùn)營人員發(fā)布新版本后膨俐,通過tag等方式記錄release分支發(fā)版的更新內(nèi)容、版本號罩句、待處理的bug焚刺、臨時性的發(fā)布原因等信息,更新versionName和versionCode门烂;
在每次master分支完成合并后乳愉,將合并內(nèi)容更新到所有develop分支;
與產(chǎn)品運(yùn)營人員交流合適的發(fā)版時機(jī)和可能存在的問題屯远;
檢查提交信息是否符合規(guī)范蔓姚,與不符合規(guī)范的提交的所有者進(jìn)行溝通;
根據(jù)日常應(yīng)用情況不斷完善此規(guī)范慨丐,補(bǔ)充一些常見問題的解決方法和Git使用技巧坡脐,如有必要還應(yīng)補(bǔ)充一些概念或技術(shù)說明,供新手查閱學(xué)習(xí)房揭;

需要注意的事項

每次新版本發(fā)布备闲,在各開發(fā)分支合并主分支的代碼(重要)

適度提交頻率

將太多代碼改動放到單獨(dú)一個提交中,可能會使提交中包含多個業(yè)務(wù)或功能模塊捅暴,過于耦合恬砂,從而增加了回顧歷史的復(fù)雜度,增加了對提交進(jìn)行合并蓬痒、摘取觉既、撤銷等操作的難度;
提交過于頻繁內(nèi)容太少,例如在修改一個bug或完成一個小功能點(diǎn)時進(jìn)行了多次提交瞪讼,就是不必要的冗余提交钧椰;

應(yīng)該盡量做到,小任務(wù)量的bug修復(fù)或功能點(diǎn)作為一個提交符欠,大任務(wù)量的bug修復(fù)或功能點(diǎn)分階段進(jìn)行多次提交嫡霞,爭取保證每個提交的內(nèi)容從業(yè)務(wù)角度或時間角度來說是獨(dú)立的;

合并分支不采用快速前進(jìn)

  • 命令行:
git merge --no-ff 

避免冗余提交 Merge remote-tracking branch ...A... into ...B...

  • 命令行:
git pull --rebase
  • AndroidStudio:

在pull時選擇updateType為rebase:

image.png

附:一些有價值的參考

一個成功的分支模型(中英文對照)

Git分支開發(fā)規(guī)范分享

GitPro 3.4:分支工作流介紹

GitPro 5.2:向一個項目做貢獻(xiàn)

Commit提交指南

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末希柿,一起剝皮案震驚了整個濱河市诊沪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌曾撤,老刑警劉巖端姚,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挤悉,居然都是意外死亡渐裸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門装悲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昏鹃,“玉大人,你說我怎么就攤上這事诀诊《床常” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵属瓣,是天一觀的道長载迄。 經(jīng)常有香客問我,道長抡蛙,這世上最難降的妖魔是什么护昧? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮溜畅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘极祸。我一直安慰自己慈格,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布遥金。 她就那樣靜靜地躺著浴捆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪稿械。 梳的紋絲不亂的頭發(fā)上选泻,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼页眯。 笑死梯捕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的窝撵。 我是一名探鬼主播傀顾,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碌奉!你這毒婦竟也來了短曾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤赐劣,失蹤者是張志新(化名)和其女友劉穎嫉拐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魁兼,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡婉徘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了璃赡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片判哥。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碉考,靈堂內(nèi)的尸體忽然破棺而出塌计,到底是詐尸還是另有隱情,我是刑警寧澤侯谁,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布锌仅,位于F島的核電站,受9級特大地震影響墙贱,放射性物質(zhì)發(fā)生泄漏热芹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一惨撇、第九天 我趴在偏房一處隱蔽的房頂上張望伊脓。 院中可真熱鬧,春花似錦魁衙、人聲如沸报腔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纯蛾。三九已至狂秘,卻和暖如春睛竣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背窗价。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碰煌,地道東北人舒岸。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像拄查,于是被迫代替她去往敵國和親吁津。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348