一種基于Git隨時(shí)發(fā)布代碼的實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體地說(shuō)是一種實(shí)用性強(qiáng)、基于Git隨時(shí)發(fā)布代碼的實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]Git作為分布式版本控制系統(tǒng),因其便捷、高效性,被越來(lái)越多的開(kāi)源項(xiàng)目所使用,并且一些傳統(tǒng)的非開(kāi)源項(xiàng)目,也開(kāi)始逐步考慮使用Git來(lái)管理項(xiàng)目文件的版本。但是目前沒(méi)有一種有效的方式基于Git進(jìn)行隨時(shí)、快速的發(fā)布,對(duì)于客戶提出的比較緊急的問(wèn)題,無(wú)法及時(shí)構(gòu)建出發(fā)布包,不能做到及時(shí)響應(yīng)。
[0003]基于此,本發(fā)明提供一種基于Git隨時(shí)發(fā)布代碼的實(shí)現(xiàn)方法,該方法通過(guò)定義Git中央庫(kù),通過(guò)Git鉤子腳本監(jiān)控中央庫(kù)中的固定分支的提交,將提交版本轉(zhuǎn)換成可以計(jì)算的自增編號(hào),并且使用任務(wù)包與開(kāi)發(fā)人員提交的源文件關(guān)聯(lián),可以靈活構(gòu)建出針對(duì)客戶需求或者bug的升級(jí)包,有效解決以上問(wèn)題。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的技術(shù)任務(wù)是針對(duì)以上不足之處,提供一種實(shí)用性強(qiáng)、基于Git隨時(shí)發(fā)布代碼的實(shí)現(xiàn)方法。
[0005]一種基于Git隨時(shí)發(fā)布代碼的實(shí)現(xiàn)方法,其具體實(shí)現(xiàn)過(guò)程為:
一、首先管理員定義Git中央庫(kù)固定分支,即管理員定義某個(gè)Git資源庫(kù)為中央庫(kù),并且指定項(xiàng)目的主干分支作為固定分支;
二、通過(guò)鉤子腳本獲取Git中央庫(kù)固定分支上代碼提交的最新版本;
三、將Git中的版本轉(zhuǎn)換成自增編號(hào)存儲(chǔ);
四、將開(kāi)發(fā)的源代碼與任務(wù)包關(guān)聯(lián);
五、隨時(shí)構(gòu)建并能獲取正確的文件版本。
[0006]所述步驟一中,管理員定義Git中央庫(kù)固定分支,開(kāi)發(fā)人員創(chuàng)建任務(wù)包,開(kāi)發(fā)人員在本地Git開(kāi)發(fā)庫(kù)中開(kāi)發(fā)代碼,開(kāi)發(fā)完成后,與中央庫(kù)固定分支的代碼同步,解決沖突后將代碼提交到中央庫(kù)中。
[0007]所述步驟二的具體過(guò)程為:在中央庫(kù)中添加鉤子腳本,監(jiān)控開(kāi)發(fā)人員的每次提交,通過(guò)在鉤子腳本中比較開(kāi)發(fā)人員的本次提交和固定分支上上次提交的版本之間的差別,獲取到包括提交的文件路徑、文件操作的信息,再結(jié)合本次提交的版本號(hào),添加提交人、時(shí)間等信息存儲(chǔ)在數(shù)據(jù)庫(kù)中,即認(rèn)為本次提交的內(nèi)容獲取完成。
[0008]所述步驟三的具體過(guò)程為:Git庫(kù)使用哈希碼作為版本號(hào),在存儲(chǔ)數(shù)據(jù)庫(kù)時(shí),會(huì)自動(dòng)為每個(gè)哈希碼定義編號(hào),編號(hào)是自增的,構(gòu)建時(shí)以此編號(hào)作為比較依據(jù)。
[0009]存儲(chǔ)數(shù)據(jù)庫(kù)時(shí),對(duì)每個(gè)提交到中央庫(kù)固定分支的哈希碼重新編號(hào)的具體過(guò)程為:編號(hào)采用自然數(shù)自增的方式,每提交一次編號(hào)加1,編號(hào)和提交的哈希碼、文件路徑、文件操作信息對(duì)應(yīng),即一次提交中包括多個(gè)文件,存儲(chǔ)在數(shù)據(jù)庫(kù)中。
[0010]所述步驟四的詳細(xì)過(guò)程為:開(kāi)發(fā)人員提交源代碼時(shí),由開(kāi)發(fā)人員定義任務(wù)包,任務(wù)包的基本信息中描述該包的作用,在開(kāi)發(fā)人員開(kāi)發(fā)完成后,中央庫(kù)接收到開(kāi)發(fā)人員從本地庫(kù)提交的代碼時(shí),將提交的代碼版本、版本編號(hào)、文件路徑、文件操作類型、提交人、提交時(shí)間信息與任務(wù)包關(guān)聯(lián),在構(gòu)建時(shí),單獨(dú)構(gòu)建該任務(wù)包,精確取出完成需求或者解決bug需要的具體文件并構(gòu)建成升級(jí)包。
[0011]所述步驟五的詳細(xì)過(guò)程為:采用任務(wù)包將針對(duì)解決客戶問(wèn)題的文件關(guān)聯(lián)起來(lái),隨時(shí)構(gòu)建任務(wù)包;在協(xié)作開(kāi)發(fā)的情況下,一個(gè)文件具有多個(gè)版本即版本編號(hào)存在多個(gè)任務(wù)包中,在構(gòu)建時(shí),首先比較出本任務(wù)包中同一文件最大的版本編號(hào),然后使用該文件的最大版本編號(hào)與該文件已經(jīng)構(gòu)建的版本編號(hào)比較,如果已經(jīng)構(gòu)建的版本編號(hào)比較大,則發(fā)布包中使用已經(jīng)構(gòu)建的最大的版本編號(hào),否則使用任務(wù)包中的文件的最大版本編號(hào),這樣保證了發(fā)布包中的文件版本不會(huì)覆蓋生產(chǎn)環(huán)境中的文件版本。
[0012]本發(fā)明的一種基于Git隨時(shí)發(fā)布代碼的實(shí)現(xiàn)方法,具有以下優(yōu)點(diǎn):
該發(fā)明的一種基于Git隨時(shí)發(fā)布代碼的實(shí)現(xiàn)方法,可以隨時(shí)構(gòu)建,及時(shí)響應(yīng)客戶;通過(guò)工具化的版本處理,相比人工挑選文件效率更高,出錯(cuò)率更低;任務(wù)包和源碼文件關(guān)聯(lián),邏輯上劃分需求或者bug對(duì)應(yīng)的源碼文件;支持多開(kāi)發(fā)人員的協(xié)作開(kāi)發(fā),可以縮短項(xiàng)目開(kāi)發(fā)周期;記錄了 Git中央庫(kù)提交記錄,并將版本轉(zhuǎn)換成自增量的編號(hào),易于版本比較,并可以提供易讀的歷史記錄信息;能夠在多人協(xié)作開(kāi)發(fā)同一項(xiàng)目的情況下,不需要人工挑揀文件構(gòu)建,隨時(shí)構(gòu)建客戶需要的發(fā)布包,提高工作效率和發(fā)布包質(zhì)量,實(shí)用性強(qiáng),適用范圍廣泛,易于推廣。
【具體實(shí)施方式】
[0013]下面結(jié)合具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
[0014]本發(fā)明提供一種基于Git隨時(shí)發(fā)布代碼的實(shí)現(xiàn)方法,解決在使用Git管理文件版本的情況下,可以正確構(gòu)建文件版本,并能隨時(shí)構(gòu)建發(fā)布包,能構(gòu)建精確解決客戶問(wèn)題,提高客戶響應(yīng)速度和滿意度。
[0015]基于此,該方法的實(shí)現(xiàn)過(guò)程為:
管理員定義Git中央庫(kù)固定分支,開(kāi)發(fā)人員創(chuàng)建任務(wù)包,開(kāi)發(fā)人員在本地Git開(kāi)發(fā)庫(kù)中開(kāi)發(fā)代碼,開(kāi)發(fā)完成后,與中央庫(kù)固定分支的代碼同步,解決沖突后將代碼提交到中央庫(kù)中。
[0016]在中央庫(kù)中添加鉤子腳本,監(jiān)控開(kāi)發(fā)人員的每次提交,通過(guò)在鉤子腳本中比較開(kāi)發(fā)人員的本次提交和固定分支上上次提交的版本之間的差別,獲取到提交的文件路徑、文件操作等信息,再結(jié)合本次提交的版本號(hào),添加提交人、時(shí)間等信息存儲(chǔ)在數(shù)據(jù)庫(kù)中,即認(rèn)為本次提交的內(nèi)容獲取完成。
[0017]Git的版本號(hào)為哈希碼,為了方便構(gòu)建時(shí)的文件版本比較,在存儲(chǔ)數(shù)據(jù)庫(kù)時(shí),會(huì)自動(dòng)為每個(gè)哈希碼定義編號(hào),編號(hào)是自增的,構(gòu)建時(shí)以此編號(hào)作為比較依據(jù)。
[0018]提交的內(nèi)容與開(kāi)發(fā)人員創(chuàng)建的任務(wù)包關(guān)聯(lián),功能可以進(jìn)行多次提交,提交信息都記錄到任務(wù)包中。
[0019]因?yàn)槭嵌鄠€(gè)開(kāi)發(fā)人員協(xié)作開(kāi)發(fā),所以可能出現(xiàn)同一文件的不同版本,在不同的任務(wù)包中,這時(shí)構(gòu)建過(guò)程需要對(duì)文件版本比較,獲取已經(jīng)構(gòu)建的文件版本對(duì)應(yīng)的編號(hào)和待構(gòu)建的任務(wù)包中文件的最新版本對(duì)應(yīng)的編號(hào),避免升級(jí)時(shí)版本覆蓋,將計(jì)算好的文件版本內(nèi)容構(gòu)建在發(fā)布包中,提供給客戶使用。
[0020]更為具體的,本發(fā)明的技術(shù)實(shí)現(xiàn)方案如下:
一、管理員定義Git中央庫(kù)的固定分支,
Git為分布式的版本控制系統(tǒng),每個(gè)資源庫(kù)都是完整的克隆,所以理論上,同一項(xiàng)目的Git資源庫(kù)是同等級(jí)別。本發(fā)明中,管理員需要定義某個(gè)Git資源庫(kù)為中央庫(kù),并且指定項(xiàng)目的主干分支作為固定分支,開(kāi)發(fā)人員在本地Git開(kāi)發(fā)庫(kù)中開(kāi)發(fā)代碼,開(kāi)發(fā)完成后,與中央庫(kù)固定分支的代碼同步,解決沖突后將代碼提交到中央庫(kù)中。
[0021]二、通過(guò)鉤子腳本獲取Git中央庫(kù)固定分支上代碼提交的最新版本。
[0022]修改中央庫(kù)中鉤子腳本pre-receive,當(dāng)用戶在本地庫(kù)執(zhí)行“git-push”即往中央庫(kù)提交代碼命令時(shí),中央庫(kù)就會(huì)調(diào)用pr