日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

團隊開發(fā)中的 Git 實踐

 KEruy 2019-10-30



本文轉(zhuǎn)載自:https://segmentfault.com/a/1190000004963641[1]

在 2005 年的某一天,Linux 之父 Linus Torvalds 發(fā)布了他的又一個里程碑作品——Git。它的出現(xiàn)改變了軟件開發(fā)流程,大大地提高了開發(fā)流暢度!直到現(xiàn)在仍十分流行,完全沒有衰退的跡象。

本文不是一篇 Git 入門教程,這樣的文章一搜一大把,我是要從具體實踐角度,尤其是在團隊協(xié)作中,闡述如何去好好地應(yīng)用 Git。既然是講在團隊中的應(yīng)用實踐,我就盡可能地結(jié)合實際場景來講述。

習(xí)慣養(yǎng)成

如果一個團隊在使用 Git 時沒有一些規(guī)范,那么將是一場難以醒來的噩夢!然而,規(guī)范固然重要,但更重要的是個人素質(zhì),在使用 Git 時需要自己養(yǎng)成良好的習(xí)慣。

提交

如何去寫一個提交信息,《Git: 教你如何在Commit時有話可說》[2]中做了很好的說明。在具體開發(fā)工作中主要需要遵守的原則就是「使每次提交都有質(zhì)量」,只要堅持做到以下幾點就 OK 了:

·提交時的粒度是一個小功能點或者一個 bug fix,這樣進行恢復(fù)等的操作時能夠?qū)ⅰ刚`傷」減到最低;·用一句簡練的話寫在第一行,然后空一行稍微詳細闡述該提交所增加或修改的地方;·不要每提交一次就推送一次,多積攢幾個提交后一次性推送,這樣可以避免在進行一次提交后發(fā)現(xiàn)代碼中還有小錯誤。

假如已經(jīng)把代碼提交了,對這次提交的內(nèi)容進行檢查時發(fā)現(xiàn)里面有個變量單詞拼錯了或者其他失誤,只要還沒有推送到遠程,就有一個不被他人發(fā)覺你的疏忽的補救方法——

首先,把失誤修正之后提交,可以用與上次提交同樣的信息。

然后,終端中執(zhí)行命令 git rebase -i [SHA],其中 SHA 是上一次提交之前的那次提交的,在這里是 3b22372。

最后,這樣就將兩次提交的節(jié)點合并成一個,甚至能夠修改提交信息!

誰說歷史不可篡改了?前提是,想要合并的那幾次提交還沒有推送到遠程!

推送

當自己一個人進行開發(fā)時,在功能完成之前不要急著創(chuàng)建遠程分支。

拉取

請讀張文鈿所寫的《使用 git rebase 避免無謂的 merge》:https:///blog/archives/3843。[3]

合并

在將其他分支的代碼合并到當前分支時,如果那個分支是當前分支的父分支,為了保持圖表的可讀性和可追蹤性,可以考慮用 git rebase 來代替 git merge;反過來或者不是父子關(guān)系的兩個分支以及互相已經(jīng) git merge 過的分支,就不要采用 git rebase 了,避免出現(xiàn)重復(fù)的沖突和提交節(jié)點。

分支管理

Git 的一大特點就是可以創(chuàng)建很多分支并行開發(fā)。正因為它的靈活性,團隊中如果沒有一個成熟的分支模型的話,那將會是一團糟。

要是誰真把這么亂的提交圖表擺在我面前,就給他一個上勾拳!

分支模型

有個很成熟的叫 Git Flow 的分支模型,它能夠應(yīng)對 99% 的場景,剩下的那 1% 留給幾乎不存在的極度變態(tài)的場景。

需要注意的是,它只是一個模型,而不是一個工具;你可以用工具去應(yīng)用這個模型,也可以用最樸實的命令行。所以,重要的是理解概念,不要執(zhí)著于實行的手段。

簡單說來,Git Flow 就是給原本普普通通的分支賦予了不同的「職責(zé)」:

·master——最為穩(wěn)定功能最為完整的隨時可發(fā)布的代碼;·hotfix——修復(fù)線上代碼的 bug;·develop——永遠是功能最新最全的分支;·feature——某個功能點正在開發(fā)階段;·release——發(fā)布定期要上線的功能。

看到上面的「master」和「develop」加粗了吧?代表它們是「主要分支」,其他的分支是基于它們派生出來的。主要分支每種類型只能有一個,派生分支每個類型可以同時存在多個。各類型分支之間的關(guān)系用一張圖來體現(xiàn)就是:

更多信息可參考 xirong[4] 所整理的《Git工作流指南》:https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md。[5]

工具選擇

一直不喜歡「**最好用」這種命題,主觀性太強,不會有一個結(jié)論。對于工具的選擇,我一直都是秉承「哪個能更好地解決問題就用哪個」這個原則。所以,只要不影響到團隊,用什么工具都是可以接受的。但根據(jù)多數(shù)開發(fā)人員的素質(zhì)情況來看,建議使用圖形化工具,例如 SourceTree(https://www./[6])。如果想用命令行,可以??!先在心里問下自己:「我 Git 牛逼不?會不會惹麻煩給別人?」

在團隊中應(yīng)用 Git Flow 時,推薦使用 SourceTree 與 GitLab (https:///[7])配合的形式:

·用 SourceTree 創(chuàng)建 feature 等分支以及本地的分支合并、刪除;·用 GitLab 做代碼審核和遠程的分支合并、刪除。

SourceTree 和 GitLab 應(yīng)該是相輔相成的存在,而不是互相取代。

事前準備

為了將一些規(guī)范性的東西和 Git Flow 的部分操作自動化處理,要對 SourceTree 和 GitLab 進行一下配置。

SourceTree

按下 command + , 調(diào)出「Preferences」界面并切換到「Git」標簽,勾選「Use rebase instead of merge by default for tracked branches」和「Do not fast-forward when merging, always create commit」。

這樣設(shè)置之后,在點「Pull」按鈕拉取代碼時會自動執(zhí)行 git pull --rebase;并且,每次合并時會自動創(chuàng)建新的包含分支信息的提交節(jié)點。

接下來,點擊工具欄中的「Git Flow」按鈕將相關(guān)的流程自動化。如果沒有特殊需求,直接按下對話框中的「OK」就好了。初始化完成后會自動切換到 develop 分支。

這下再點「Git Flow」按鈕所彈出的對話框就是選擇創(chuàng)建分支類型的了。

GitLab

在創(chuàng)建項目倉庫后一定要把主要分支,也就是 master 和 develop 給保護起來。為它們設(shè)置權(quán)限,只有項目負責(zé)人可以進行推送和刪除等操作。

被保護的分支在列表中會有特殊的標記進行區(qū)分。

開發(fā)流程

在引入 Git Flow 之后,所有工作都要圍繞著它來展開,將原本的流程與之結(jié)合形成「基于 Git Flow 的開發(fā)流程」。

開發(fā)功能

在確定發(fā)布日期之后,將需要完成的內(nèi)容細分一下分配出去,負責(zé)某個功能的開發(fā)人員利用 SourceTree 所提供的 Git Flow 工具創(chuàng)建一個對應(yīng)的 feature 分支。如果是多人配合的話,創(chuàng)建分支并做一些初始化工作之后就推送創(chuàng)建遠程分支;否則,直到功能開發(fā)完畢要合并進 develop 前,不要創(chuàng)建遠程分支。

功能開發(fā)完并自測之后,先切換到 develop 分支將最新的代碼拉取下來,再切換回自己負責(zé)的 feature 分支把 develop 分支的代碼合并進來。合并方式參照上文中的「合并」,如果有沖突則自己和配合的人一起解決。

然后,到 GitLab 上的項目首頁創(chuàng)建合并請求(merge request)。

「來源分支」選擇要被合并的 feature 分支且「目標分支」選擇 develop 分支后點擊「比較分支」按鈕,在出現(xiàn)的表單中將處理人指派為項目負責(zé)人。

項目負責(zé)人在收到合并請求時,應(yīng)該先做下代碼審核看看有沒有明顯的嚴重的錯誤;有問題就找負責(zé)開發(fā)的人去修改,沒有就接受請求并刪除對應(yīng)的 feature 分支。

在將某次發(fā)布的所需功能全部開發(fā)完成時,就可以交付測試了。

測試功能

負責(zé)測試的人創(chuàng)建一個 release 分支部署到測試環(huán)境進行測試;若發(fā)現(xiàn)了 bug,相應(yīng)的開發(fā)人員就在 release 分支上或者基于 release 分支創(chuàng)建一個分支進行修復(fù)。

發(fā)布上線

當確保某次發(fā)布的功能可以發(fā)布時,負責(zé)發(fā)布的人將 release 分支合并進 master 和 develop 并打上 tag,然后打包發(fā)布到線上環(huán)境。

建議打 tag 時在信息中詳細描述這次發(fā)布的內(nèi)容,如:添加了哪些功能,修復(fù)了什么問題。

修復(fù)問題

當發(fā)現(xiàn)線上環(huán)境的代碼有小問題或者做些文案修改時,相關(guān)開發(fā)人員就在本地創(chuàng)建 hotfix 分支進行修改,具體操作參考「開發(fā)功能」。

如果是相當嚴重的問題,可能就得回滾到上一個 tag 的版本了。

額外說明

這里所提到的事情,雖非必需,但知道之后卻會如虎添翼。

分支命名

除了主要分支的名字是固定的之外,派生分支是需要自己命名的,這里就要有個命名規(guī)范了。強烈推薦用如下形式:

·feature——按照功能點(而不是需求)命名;·release——用發(fā)布時間命名,可以加上適當?shù)那熬Y;·hotfix——GitLab 的 issue 編號或 bug 性質(zhì)等。

另外還有 tag,用語義化的版本號(http:///lang/zh-CN/)命名。[8]

發(fā)布日期

發(fā)布頻率是影響開發(fā)人員與測試人員的新陳代謝和心情的重要因素之一,頻繁無規(guī)律的發(fā)布會導(dǎo)致內(nèi)分泌失調(diào)、情緒暴躁,致使爆粗口、砸電腦等狀況出現(xiàn)。所以,確保一個固定的發(fā)布周期至關(guān)重要!

在有一波或幾波需求來臨之時,想擋掉是不太可能的,但可以在評審時將它(們)分期,在某個發(fā)布日之前只做一部分。這是必須要控制住的!不然任由著需求方說「這個今天一定要上」「那個明天急著用」的話,技術(shù)人員就等著進醫(yī)院吧!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多