缺陷跟蹤(Bug Tracking)是軟件研發(fā)流程中重要的一環(huán),集項目需求管理和缺陷管理于一身废酷,通過對研發(fā)工作流的控制幫助團隊建立規(guī)范的研發(fā)體系。GitHub提供輕量級的缺陷跟蹤模塊舆瘪,稱為Issues臊岸。小巧、易用的Issues模塊能與Pull Request緊密整合蕉饼,是Pull Request工作流的有益補充虐杯。
一個小型、管理文檔和網(wǎng)頁的項目昧港,使用Pull Request往往就足夠了擎椰。試想如果貢獻者能夠直接修改代碼(Fork and edit this file)并通過Pull Request貢獻給項目核心開發(fā)者,那么為什么還要通過Issues模塊報告錯誤并由他人來更改呢创肥?但是對于大型項目需要做需求管理达舒,或者參與代碼開發(fā)有難度,則非常有必要通過Issues模塊啟用缺陷跟蹤系統(tǒng)叹侄,提供更多途徑讓貢獻者參與到項目中來巩搏。
缺陷跟蹤可以通過項目的管理頁面開啟或關(guān)閉
標(biāo)簽
缺陷跟蹤系統(tǒng)通常可用于管理多種不同類型的問題:需求趾代、缺陷或其它塔猾,也可以通過項目不同模塊、組件來為問題分類稽坤。GitHub在問題分類的實現(xiàn)上非常簡單,通過標(biāo)簽(label)來為問題建立分類。
開啟Issues模塊后蓝翰,項目的菜單中多出一個“Issues”項,點擊則進入問題瀏覽界面, 輸入新的標(biāo)簽名得湘,并為標(biāo)簽選擇一個顏色,創(chuàng)建新的標(biāo)簽
里程碑
里程碑(Milestones)是項目進度管理的重要工具顿仇。在傳統(tǒng)項目管理中淘正,里程碑對應(yīng)于一個項目開發(fā)計劃、一個軟件版本臼闻;在敏捷項目管理中鸿吆,里程碑對應(yīng)于一個Sprint(沖刺);在軟件代碼的版本庫中則對應(yīng)于一個標(biāo)簽(tag)或分支(branch)述呐。
在Issues模塊中的“Milestones”頁面用于里程碑管理惩淳。創(chuàng)建新的里程碑需要輸入里程碑名稱和里程碑的截止時間, 創(chuàng)建的里程碑以進度條形式顯示在里程碑頁面中.
Issue的生命周期
GitHub的Issues模塊非常簡單,對標(biāo)簽和里程碑進行簡單的設(shè)置后乓搬,基本上就完成了Issues模塊的配置工作思犁,接下來就是如何創(chuàng)建和修改Issue,完成項目的缺陷跟蹤和需求管理等进肯,這才是Issues模塊的主要工作激蹲。
每個Issue都有自己的生命周期,從問題的創(chuàng)建江掩,到問題的指派学辱,再到問題的解決,直至問題的關(guān)閉
普通貢獻者創(chuàng)建問題時只能錄入問題的標(biāo)題和描述环形,而不能設(shè)置問題的指派(誰來負(fù)責(zé))项郊、添加標(biāo)簽和設(shè)置里程碑。
郵件通知功能是缺陷跟蹤系統(tǒng)推動工作流的重要工具斟赚,GitHub的Issues模塊也具有郵件通知功能。除了像其他缺陷跟蹤系統(tǒng)在收到郵件通知后差油,訪問Web界面參與問題的討論外拗军,還可以直接以郵件回復(fù)的功能參與到工作流中
GitHub還支持版本庫提交和問題建立關(guān)聯(lián),只要提交說明中出現(xiàn)“#xxx”(Issue編號)字樣蓄喇。如果在提交說明中的問題編號前出現(xiàn)特定關(guān)鍵字发侵,還可以關(guān)閉問題。支持的關(guān)鍵字有:
- fixes #xxx
- fixed #xxx
- fix #xxx
- closes #xxx
- close #xxx
- closed #xxx
下面就以gotgithub/helloworld版本庫為例妆偏,關(guān)閉編號為“#1”的問題刃鳄。
- 克隆版本庫,若本地工作區(qū)尚不存在钱骂。
$ git clone git@github.com:gotgithub/helloworld.git
$ cd helloworld
- 編輯文件src/main.c叔锐,改正“問題#1”發(fā)現(xiàn)的文字錯誤挪鹏。
$ vi src/main.c
$ git diff
diff --git a/src/main.c b/src/main.c
index 3daf9fe..f974b49 100644
--- a/src/main.c
+++ b/src/main.c
@@ -19,7 +19,7 @@ int usage(int code)
......
- 將修改添加至?xí)捍鎱^(qū)。
$ git add -u
- 提交愉烙,并在提交說明中用fixed #xxx關(guān)鍵字關(guān)閉相關(guān)問題讨盒。
$ git commit -m "Fixed #1: -help should be --help."
- 向GitHub版本庫推送。
$ git push
Pull Requst也是Issue
Pull Request和Issue一樣步责,也是一種對項目的反饋返顺,而且是更為主動的反饋。GitHub的Issues模塊將Pull Request也納入到問題的管理之中蔓肯,完美地將Pull Request整合到問題追蹤的框架之中遂鹊。
為了弄清二者之間的關(guān)聯(lián),首先創(chuàng)建一個Pull Request蔗包。
以非項目成員(如用戶 omnidroid)的賬號訪問gotgithub/helloworld項目秉扑,查看文件src/Makefile,點擊“Fork and edit this file”按鈕快速創(chuàng)建派生項目
通過GitHub提供的在線編輯功能修改src/Makefile文件气忠,修改完畢后撰寫提交說明邻储,點擊“Propose File Change”按鈕提交
在提交說明中特意使用了“Fixed #2”關(guān)鍵字,以便該提交被上游版本庫接納后能夠關(guān)閉關(guān)聯(lián)的問題旧噪。
當(dāng)完成提交后吨娜,GitHub會自動開啟創(chuàng)建新的Pull Request對話框
Pull Request創(chuàng)建完畢后,除了在菜單項“Pull Requests”中有顯示外淘钟,在“Issues”的問題瀏覽頁面中也會顯示, 新建立的Pull Request的編號不是從壹開始創(chuàng)建宦赠,而是接著問題的編號順序創(chuàng)建,所以當(dāng)Pull Request出現(xiàn)在問題列表中時米母,如果不注意后面的山型的分支圖標(biāo)勾扭,根本意識不到這不是一個普通的問題(Issue),而是一個Pull Request铁瞒。顯示在問題瀏覽界面中的Pull Request和問題一樣妙色,可以為其設(shè)置標(biāo)簽、指派負(fù)責(zé)人慧耍、設(shè)置里程碑身辨。
點擊編號為“#3”的問題(Pull Request),會進入到Pull Request頁面芍碧。點擊頁面中的“Merge pull request”按鈕實現(xiàn)Pull Request的合并煌珊。點擊“Confirm Merge”確認(rèn)合并. 完成合并后,查看該Pull Request泌豆,可以看到該Pull Request已經(jīng)關(guān)閉