張海清,趙衛(wèi)東,李代偉,唐聃,魏維,吳四九
(1.成都信息工程大學(xué) 軟件工程學(xué)院,四川成都 610225;2.成都大學(xué) 計算機學(xué)院,四川成都 610100)
Github是一個開源協(xié)同平臺,是一個面向開源及私有軟件項目的托管平臺,支持Git協(xié)議作為唯一的版本庫格式。Github是基于Git的代碼托管平臺,繳費客戶可建設(shè)私人倉庫,免費的客戶只能使用公共倉庫,代碼需要公開。Github由Chris Wanstrath,PJ Hyett 與Tom Preston-Werner三位創(chuàng)始人在2008年4月發(fā)布。除了Git代碼倉庫托管及基本的Web管理界面外,還提供了訂閱、在線文件編輯器、討論組、文本渲染、協(xié)作圖譜及代碼片段分享(Gist)等功能?,F(xiàn)在,托管版本數(shù)量很多,也有其他知名開源項目Ruby on Rails、jQuery、python等。Git分布式版本控制系統(tǒng)主要應(yīng)用在軟件項目托管平臺,通過網(wǎng)頁訪問公開或者私人項目,瀏覽源代碼、修改代碼及注釋。其最突出的特點在于“階段版本控制”,它可以瀏覽任意提交過的版本并提供文件歷史庫,團隊成員也可以在其內(nèi)置聊天程序中進(jìn)行交流,非常便捷[1-2]。隨著版本控制系統(tǒng)Git的廣泛應(yīng)用,越來越多的項目被移植到Github上[3]。由于Github基于版本控制技術(shù),其突出的版本控制性和團隊協(xié)作性,可以用來作為一個輔助教學(xué)系統(tǒng)工具[4-6]。
學(xué)生的實驗數(shù)據(jù)和實驗報告文檔可以存儲在學(xué)生自己的本地倉庫中,本地倉庫由Git維護的三棵“樹”組成。一是工作目錄,持有實際文件;二是暫存區(qū)(Index),臨時保存改動;三是HEAD,指向最后一次提交的結(jié)果。學(xué)生可以提出修改(把它添加到暫存區(qū)內(nèi)),有如下使用命令:
git add <filename>
git add *
這是Git工作流程的第一步。使用以下命令以實際提交改動:
git commit -m “提交信息”
改動現(xiàn)在已經(jīng)在本地倉庫的HEAD中了。執(zhí)行以下命令以將這些改動提交到遠(yuǎn)端倉庫中:
git push origin master
可把master改成要推送的任何分支。分支用來將特性開發(fā)絕緣開來。在創(chuàng)建倉庫時,master是“默認(rèn)”分支。在其他分支上面進(jìn)行開發(fā),開發(fā)后再將它們合并到主分支上。
如還沒有克隆現(xiàn)有倉庫,并將倉庫連接到某遠(yuǎn)程服務(wù)器上,可用如下命令:
git remote add origin <server>
這樣就能夠?qū)⒏膭影l(fā)送到所添加的服務(wù)器上。
Markdown是一種可使用普通文本編輯器編寫的標(biāo)記語言。設(shè)計它的目的是用最簡單的語言快速生成網(wǎng)頁頁面,無須復(fù)雜的程序設(shè)計。用簡單的標(biāo)記語法,就可使普通文本內(nèi)容具有富文本的格式。Markdown有系列的衍生版本,用來擴展Markdown的功能,比如表格、內(nèi)嵌HTML、腳注等。Markdown的語法簡單、易學(xué),并且功能要比純文本更強,所以Github用它作為平臺的基本文本樣式,平臺以“README.md”的文件名作為默認(rèn)頁面文件,當(dāng)用戶進(jìn)入頁面時,自動以網(wǎng)頁形式呈現(xiàn)該文件的內(nèi)容。
由于Markdown的原文是普通文本,所以可以使用同一個IDE編輯器編寫程序和文檔,這樣就極大提高了程序和文檔的可維護性,同時也方便教師的批改,既可線上修改,也可線下修改。
Markdown文件除了可以在網(wǎng)頁直接呈現(xiàn)之外,還可以用像RStudio這樣的編輯器,快速將Markdown轉(zhuǎn)化為演講PPT、Word產(chǎn)品文檔、LaTex論文。因此Markdown語言必將越來越廣泛地應(yīng)用于信息工程領(lǐng)域的文檔編寫工作中。
在實驗開始前,與所有平臺一樣,每名教師和學(xué)生必須要注冊一個賬號。所以實驗前的準(zhǔn)備工作首先應(yīng)是專門針對Github平臺使用技能進(jìn)行訓(xùn)練,通過搭建Github實驗環(huán)境,可以讓學(xué)生熟悉和掌握Github平臺工具的基本用法,這是后續(xù)實驗的基礎(chǔ)[7]。申請Github賬號的過程比較簡單,但是要將教師的賬號和學(xué)生的賬號綁定在一起就比較繁瑣。最簡單有效的方法是通過代碼倉庫(repository)進(jìn)行聯(lián)系,見圖1。教師和學(xué)生都必須先申請一個賬號,然后各自創(chuàng)建自己的倉庫。通常,教師倉庫TeacherRepo是公開的,便于所有學(xué)生直接查看,而學(xué)生倉庫StudentRepo是私有的,這樣學(xué)生之間就不能互相訪問對方的倉庫。這樣設(shè)計是為了避免學(xué)生互相抄襲。教師倉庫TeacherRepo用來存儲教師的課程資料和實驗指導(dǎo)材料相關(guān)文檔,學(xué)生倉庫StudentRepo用來存儲學(xué)生的實驗結(jié)果文檔。
實驗準(zhǔn)備階段中有一個對教師來講比較繁瑣的工作,就是批量確認(rèn)學(xué)生發(fā)出的申請郵件。由于這個工作是在教師的郵箱界面進(jìn)行的,不屬于Github的管理范圍,因此必須逐個手工確認(rèn)。一旦郵件確認(rèn)成功,對于每個學(xué)生的StudentRepo倉庫而言,就有了兩個成員,一是學(xué)生本人,二是教師,允許學(xué)生和教師共同維護StudentRepo。實驗教學(xué)過程中允許學(xué)生提交實驗報告,允許教師批改實驗報告。
在師生都準(zhǔn)備好了倉庫之后,就可以開始實驗,教師和學(xué)生的實驗過程是一個協(xié)同工作流,見圖2。教師應(yīng)將每個實驗分配到TeacherRepo中的不同目錄,學(xué)生可以Fork到自己的倉庫中。學(xué)生應(yīng)按照TeacherRepo中的實驗要求完成實驗,最好以Markdown格式編寫,在教師規(guī)定的時間內(nèi)將實驗結(jié)果和實驗報告推送(push)到StudentRepo中,完成實驗。系統(tǒng)會自動記錄推送日期,教師可以查看學(xué)生是否按時提交。
在實驗截止日期到達(dá)之后,教師需要將學(xué)生的實驗結(jié)果通過Git命令下載到教師本地電腦中,然后進(jìn)行實驗報告的批閱。批閱過程很簡單,就是在學(xué)生原代碼或者原文件上直接寫上正確的文字。特別是對于代碼文件,教師只管將正確的代碼替換學(xué)生的代碼即可,無須專門指出學(xué)生哪里有錯誤。教師逐一批改完每名學(xué)生的實驗文檔之后,應(yīng)將文檔分別推送到每個學(xué)生對應(yīng)的StudentRepo中,讓學(xué)生查閱實驗批改情況。
特別需要強調(diào)的是,相比Word或者PDF文字處理工具,教師的批閱過程極其方便和快捷。教師對實驗報告的審閱無須像文字處理工具那樣添加批注,只需要專注學(xué)生出現(xiàn)的問題,在學(xué)生的原始文件上直接修改即可。而且由于同一個實驗的標(biāo)準(zhǔn)答案都是一樣的,在很多情況下教師可以直接復(fù)制粘貼,大大提高了評閱的效率。
教師上傳到StudentRepo的批改后的實驗報告是標(biāo)準(zhǔn)答案或者是對學(xué)生錯誤的批注,學(xué)生看到的也是最新版本的內(nèi)容。由于Github完全基于Git協(xié)議,所以它提供了一個非常強大的功能就是查看文件歷史(history),該功能可以在界面上直接呈現(xiàn)教師批閱的文件痕跡,見表1,學(xué)生在Github界面上查看教師評閱痕跡。這些批注都是在教師在批改報告的時候自動生成的,學(xué)生看到這樣的批注,就立即知道教師修改了哪些地方。
在整個實驗協(xié)同工作流中,教師需要使用Git命令批量下載和推送實驗報告文檔,也可能需要批量查詢學(xué)生的完成情況或者完成一些自定義的操作,手工對每名學(xué)生進(jìn)行這些操作可能會需要花費大量的時間。Github對外提供了一套開發(fā)者應(yīng)用編程接口(API),允許開發(fā)者編程抓取代碼庫的開發(fā)活動數(shù)據(jù)[4],教師可以通過編寫應(yīng)用程序或者腳本,自動訪問Github資料庫中的用戶和資源。
表1 學(xué)生在Github界面上查看教師評閱痕跡
在實驗過程中,除了通過文檔的交換完成實驗工作流之外,Github還通過Issues功能提供了成員之間的溝通渠道。教師和學(xué)生可以非常方便地在Issues實現(xiàn)溝通和交流,同時教師也可以了解學(xué)生之間交流的情況,教師在學(xué)生項目開發(fā)過程中的控制和管理更加方便,測評也有了合理的依據(jù)[8-9]。對于這些數(shù)據(jù)信息的處理,還可通過第三方工具M(jìn)iningit和Bicho來實現(xiàn)。通過這兩個工具,用戶可以抓取項目的相關(guān)數(shù)據(jù)信息并存儲到本地數(shù)據(jù)庫中,以便進(jìn)一步研究和使用[10]。
通過以上討論,可以看出Github特別適合作為軟件工程專業(yè)及信息科學(xué)專業(yè)學(xué)生的實驗教學(xué)平臺。不僅在校園內(nèi),學(xué)生畢業(yè)進(jìn)入到社會工作之后,Git機制還可在公司內(nèi)部進(jìn)行高效的代碼管控。同時,也應(yīng)該看到,這個工作流也有一些局限性,如無法判斷學(xué)生抄襲情況,無法自動給實驗評分[11],對其他非軟件工程專業(yè)的實驗管理不方便等。而Github系統(tǒng)平臺也意識到了其對教育教學(xué)的輔助功能,線上已經(jīng)推出面向教育的課堂工具[12-14],Github課堂提供了教師面對眾多學(xué)生進(jìn)行高效的輔助實驗教學(xué)的功能模塊。
創(chuàng)新創(chuàng)業(yè)理論研究與實踐2022年20期