git 打tag_图文讲解,团队开发中的 Git 最佳实践
私信我,回復:學習,獲取免費學習資源包。
在 2005 年的某一天,Linux 之父 Linus Torvalds 發(fā)布了他的又一個里程碑作品——Git。它的出現(xiàn)改變了軟件開發(fā)流程,大大地提高了開發(fā)流暢度!直到現(xiàn)在仍十分流行,完全沒有衰退的跡象。
本文不是一篇 Git 入門教程,這樣的文章一搜一大把,我是要從具體實踐角度,尤其是在團隊協(xié)作中,闡述如何去好好地應用 Git。既然是講在團隊中的應用實踐,我就盡可能地結(jié)合實際場景來講述。
習慣養(yǎng)成
如果一個團隊在使用 Git 時沒有一些規(guī)范,那么將是一場難以醒來的噩夢!然而,規(guī)范固然重要,但更重要的是個人素質(zhì),在使用 Git 時需要自己養(yǎng)成良好的習慣。
提交
如何去寫一個提交信息,《Git: 教你如何在Commit時有話可說》中做了很好的說明。在具體開發(fā)工作中主要需要遵守的原則就是「使每次提交都有質(zhì)量」,只要堅持做到以下幾點就 OK 了:
- 提交時的粒度是一個小功能點或者一個 bug fix,這樣進行恢復等的操作時能夠?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》。
合并
在將其他分支的代碼合并到當前分支時,如果那個分支是當前分支的父分支,為了保持圖表的可讀性和可追蹤性,可以考慮用 git rebase 來代替 git merge;反過來或者不是父子關系的兩個分支以及互相已經(jīng) git merge 過的分支,就不要采用 git rebase 了,避免出現(xiàn)重復的沖突和提交節(jié)點。
分支管理
Git 的一大特點就是可以創(chuàng)建很多分支并行開發(fā)。正因為它的靈活性,團隊中如果沒有一個成熟的分支模型的話,那將會是一團糟。
要是誰真把這么亂的提交圖表擺在我面前,就給他一個上勾拳!
分支模型
有個很成熟的叫「Git Flow」的分支模型,它能夠應對 99% 的場景,剩下的那 1% 留給幾乎不存在的極度變態(tài)的場景。
需要注意的是,它只是一個模型,而不是一個工具;你可以用工具去應用這個模型,也可以用最樸實的命令行。所以,重要的是理解概念,不要執(zhí)著于實行的手段。
簡單說來,Git Flow 就是給原本普普通通的分支賦予了不同的「職責」:
- master——最為穩(wěn)定功能最為完整的隨時可發(fā)布的代碼;
- hotfix——修復線上代碼的 bug;
- develop——永遠是功能最新最全的分支;
- feature——某個功能點正在開發(fā)階段;
- release——發(fā)布定期要上線的功能。
看到上面的「master」和「develop」加粗了吧?代表它們是「主要分支」,其他的分支是基于它們派生出來的。主要分支每種類型只能有一個,派生分支每個類型可以同時存在多個。各類型分支之間的關系用一張圖來體現(xiàn)就是:
更多信息可參考 xirong 所整理的《Git工作流指南》。
工具選擇
一直不喜歡「**最好用」這種命題,主觀性太強,不會有一個結(jié)論。對于工具的選擇,我一直都是秉承「哪個能更好地解決問題就用哪個」這個原則。所以,只要不影響到團隊,用什么工具都是可以接受的。但根據(jù)多數(shù)開發(fā)人員的素質(zhì)情況來看,建議使用圖形化工具,例如 SourceTree。如果想用命令行,可以啊!先在心里問下自己:「我 Git 牛逼不?會不會惹麻煩給別人?」
在團隊中應用 Git Flow 時,推薦使用 SourceTree 與 GitLab 配合的形式:
- 用 SourceTree 創(chuàng)建 feature 等分支以及本地的分支合并、刪除;
- 用 GitLab 做代碼審核和遠程的分支合并、刪除。
SourceTree 和 GitLab 應該是相輔相成的存在,而不是互相取代。
事前準備
為了將一些規(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」。
這樣設置之后,在點「Pull」按鈕拉取代碼時會自動執(zhí)行 git pull --rebase;并且,每次合并時會自動創(chuàng)建新的包含分支信息的提交節(jié)點。
接下來,點擊工具欄中的「Git Flow」按鈕將相關的流程自動化。如果沒有特殊需求,直接按下對話框中的「OK」就好了。初始化完成后會自動切換到 develop 分支。
這下再點「Git Flow」按鈕所彈出的對話框就是選擇創(chuàng)建分支類型的了。
GitLab
在創(chuàng)建項目倉庫后一定要把主要分支,也就是 master 和 develop 給保護起來。為它們設置權限,只有項目負責人可以進行推送和刪除等操作。
被保護的分支在列表中會有特殊的標記進行區(qū)分。
開發(fā)流程
在引入 Git Flow 之后,所有工作都要圍繞著它來展開,將原本的流程與之結(jié)合形成「基于 Git Flow 的開發(fā)流程」。
開發(fā)功能
在確定發(fā)布日期之后,將需要完成的內(nèi)容細分一下分配出去,負責某個功能的開發(fā)人員利用 SourceTree 所提供的 Git Flow 工具創(chuàng)建一個對應的 feature 分支。如果是多人配合的話,創(chuàng)建分支并做一些初始化工作之后就推送創(chuàng)建遠程分支;否則,直到功能開發(fā)完畢要合并進 develop 前,不要創(chuàng)建遠程分支。
功能開發(fā)完并自測之后,先切換到 develop 分支將最新的代碼拉取下來,再切換回自己負責的 feature 分支把 develop 分支的代碼合并進來。合并方式參照上文中的「合并」,如果有沖突則自己和配合的人一起解決。
然后,到 GitLab 上的項目首頁創(chuàng)建合并請求(merge request)。
「來源分支」選擇要被合并的 feature 分支且「目標分支」選擇 develop 分支后點擊「比較分支」按鈕,在出現(xiàn)的表單中將處理人指派為項目負責人。
項目負責人在收到合并請求時,應該先做下代碼審核看看有沒有明顯的嚴重的錯誤;有問題就找負責開發(fā)的人去修改,沒有就接受請求并刪除對應的 feature 分支。
在將某次發(fā)布的所需功能全部開發(fā)完成時,就可以交付測試了。
測試功能
負責測試的人創(chuàng)建一個 release 分支部署到測試環(huán)境進行測試;若發(fā)現(xiàn)了 bug,相應的開發(fā)人員就在 release 分支上或者基于 release 分支創(chuàng)建一個分支進行修復。
發(fā)布上線
當確保某次發(fā)布的功能可以發(fā)布時,負責發(fā)布的人將 release 分支合并進 master 和 develop 并打上 tag,然后打包發(fā)布到線上環(huán)境。
建議打 tag 時在信息中詳細描述這次發(fā)布的內(nèi)容,如:添加了哪些功能,修復了什么問題。
修復問題
當發(fā)現(xiàn)線上環(huán)境的代碼有小問題或者做些文案修改時,相關開發(fā)人員就在本地創(chuàng)建 hotfix 分支進行修改,具體操作參考「開發(fā)功能」。
如果是相當嚴重的問題,可能就得回滾到上一個 tag 的版本了。
額外說明
這里所提到的事情,雖非必需,但知道之后卻會如虎添翼。
分支命名
除了主要分支的名字是固定的之外,派生分支是需要自己命名的,這里就要有個命名規(guī)范了。強烈推薦用如下形式:
- feature——按照功能點(而不是需求)命名;
- release——用發(fā)布時間命名,可以加上適當?shù)那熬Y;
- hotfix——GitLab 的 issue 編號或 bug 性質(zhì)等。
另外還有 tag,用語義化的版本號命名。
發(fā)布日期
發(fā)布頻率是影響開發(fā)人員與測試人員的新陳代謝和心情的重要因素之一,頻繁無規(guī)律的發(fā)布會導致內(nèi)分泌失調(diào)、情緒暴躁,致使爆粗口、砸電腦等狀況出現(xiàn)。所以,確保一個固定的發(fā)布周期至關重要!
在有一波或幾波需求來臨之時,想擋掉是不太可能的,但可以在評審時將它(們)分期,在某個發(fā)布日之前只做一部分。這是必須要控制住的!不然任由著需求方說「這個今天一定要上」「那個明天急著用」的話,技術人員就等著進醫(yī)院吧!
來源網(wǎng)絡,侵權聯(lián)系刪除
私信我,回復:學習,獲取免費學習資源包。
總結(jié)
以上是生活随笔為你收集整理的git 打tag_图文讲解,团队开发中的 Git 最佳实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python嵌套循环执行顺序_两个嵌套f
- 下一篇: python二维元组_python中读入