本發(fā)明涉及通信技術(shù)領(lǐng)域,具體而言,涉及一種代碼同步方法及系統(tǒng)。
背景技術(shù):
目前,SVN(Subversion,開放源代碼的版本控制系統(tǒng))和Git(分布式版本控制系統(tǒng))是代碼開發(fā)常用的兩種版本控制工具。
Git是用于Linux內(nèi)核開發(fā)的版本控制工具,采用分布式版本庫的方式,不必服務(wù)器端軟件支持,使源代碼的發(fā)布和交流極其方便。SVN采用了分支管理系統(tǒng),用于多個人共同開發(fā)同一個項(xiàng)目,實(shí)現(xiàn)開發(fā)同一個項(xiàng)目的多個人共用資源。對于熟悉代碼開發(fā)的開發(fā)人員來說,Git的靈活性和通用性是SVN不能比擬的。很多開發(fā)人員習(xí)慣使用Git進(jìn)行代碼管理,但是很多公司都是使用SVN作為代碼管理工具,而當(dāng)前Git與SVN無法實(shí)現(xiàn)同步代碼管理,如此導(dǎo)致使用SVN的公司的開發(fā)人員無法使用Git來管理代碼。
因此急需一種代碼同步方案,以實(shí)現(xiàn)Git與SVN之間的代碼同步,使采用SVN管理代碼的公司中的開發(fā)人員可以使用Git作為代碼管理工具。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明實(shí)施例的目的在于提供一種代碼同步方法及系統(tǒng),在第一管理器和第二管理器之間添加中間服務(wù)器,通過中間服務(wù)器實(shí)現(xiàn)第一管理器與第二管理器之間的代碼同步,能夠?qū)崿F(xiàn)Git與SVN之間的代碼同步,使采用SVN的公司中的開發(fā)人員可以使用Git作為代碼管理工具。
第一方面,本發(fā)明實(shí)施例提供了一種代碼同步方法,所述方法包括:
接收第一管理器發(fā)送的同步通知,所述同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志;
根據(jù)所述第二管理器的標(biāo)識和所述項(xiàng)目標(biāo)識,獲取所述項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件;
根據(jù)所述第一管理器的標(biāo)識,從所述第一管理器獲取待同步代碼;
將所述待同步代碼添加在所述項(xiàng)目文件中得到同步文件,將所述提交日志和所述同步文件發(fā)送給所述第二管理器。
結(jié)合第一方面,本發(fā)明實(shí)施例提供了上述第一方面的第一種可能的實(shí)現(xiàn)方式,其中,所述根據(jù)所述第二管理器的標(biāo)識和所述項(xiàng)目標(biāo)識,獲取所述項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件,包括:
根據(jù)所述項(xiàng)目標(biāo)識,判斷本地內(nèi)存中是否存在所述項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件;
如果是,則直接從本地內(nèi)存中獲取所述項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件;
如果否,則根據(jù)所述第二管理器的標(biāo)識,發(fā)送獲取請求給所述第二管理器,所述獲取請求攜帶所述項(xiàng)目標(biāo)識,接收所述第二管理器發(fā)送的所述項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件。
結(jié)合第一方面,本發(fā)明實(shí)施例提供了上述第一方面的第二種可能的實(shí)現(xiàn)方式,其中,所述接收第一管理器發(fā)送的同步通知之前,還包括:
生成數(shù)字證書,所述數(shù)字證書用于與第一管理器和第二管理器進(jìn)行通信;
執(zhí)行權(quán)限賦予指令,獲得本地文件的讀寫權(quán)限。
結(jié)合第一方面,本發(fā)明實(shí)施例提供了上述第一方面的第三種可能的實(shí)現(xiàn)方式,其中,所述方法還包括:
每隔預(yù)設(shè)時間段,從所述第二管理器獲取每個項(xiàng)目的項(xiàng)目標(biāo)識及項(xiàng)目文件,存儲所述每個項(xiàng)目的項(xiàng)目標(biāo)識與項(xiàng)目文件的對應(yīng)關(guān)系。
結(jié)合第一方面或第一方面的第一至第三種可能的實(shí)現(xiàn)方式中的任一種實(shí)現(xiàn)方式,本發(fā)明實(shí)施例提供了上述第一方面的第四種可能的實(shí)現(xiàn)方式,其中,
所述第一管理器為分布式版本控制系統(tǒng)Git管理器,所述第二管理器為開放源代碼的版本控制系統(tǒng)SVN管理器;或者,
所述第一管理器為SVN管理器,所述第二管理器為Git管理器。
第二方面,本發(fā)明實(shí)施例提供了一種代碼同步方法,所述方法包括:
發(fā)送同步通知給中間服務(wù)器,所述同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志;
當(dāng)接收到所述中間服務(wù)器獲取代碼的獲取請求時,傳輸待同步代碼給所述中間服務(wù)器,以使所述中間服務(wù)器將所述待同步代碼同步至所述第二管理器中。
結(jié)合第二方面,本發(fā)明實(shí)施例提供了上述第二方面的第一種可能的實(shí)現(xiàn)方式,其中,所述方法還包括:
當(dāng)接收到所述中間服務(wù)器發(fā)送的攜帶項(xiàng)目標(biāo)識的獲取請求時,發(fā)送所述項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件給所述中間服務(wù)器;
接收所述中間服務(wù)器發(fā)送的同步文件。
結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式,本發(fā)明實(shí)施例提供了上述第二方面的第二種可能的實(shí)現(xiàn)方式,其中,
所述第一管理器為Git管理器,所述第二管理器為SVN管理器;或者,
所述第一管理器為SVN管理器,所述第二管理器為Git管理器。
第三方面,本發(fā)明實(shí)施例提供了一種代碼同步系統(tǒng),所述系統(tǒng)包括第一管理器、中間服務(wù)器和第二管理器;
所述第一管理器,用于發(fā)送同步通知給所述中間服務(wù)器,當(dāng)接收到所述中間服務(wù)器獲取代碼的獲取請求時,傳輸待同步代碼給所述中間服務(wù)器,所述同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志;
所述中間服務(wù)器,用于接收所述同步通知,根據(jù)所述第二管理器的標(biāo)識和所述項(xiàng)目標(biāo)識,獲取所述項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件;根據(jù)所述第一管理器的標(biāo)識,從所述第一管理器獲取待同步代碼;將所述待同步代碼添加在所述項(xiàng)目文件中得到同步文件,將所述提交日志和所述同步文件發(fā)送給所述第二管理器;
所述第二管理器,用于當(dāng)接收到所述中間服務(wù)器發(fā)送的攜帶項(xiàng)目標(biāo)識的獲取請求時,發(fā)送所述項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件給所述中間服務(wù)器;接收所述中間服務(wù)器發(fā)送的所述同步文件。
結(jié)合第三方面,本發(fā)明實(shí)施例提供了上述第三方面的第一種可能的實(shí)現(xiàn)方式,其中,
所述第一管理器為Git管理器,所述第二管理器為SVN管理器;或者,
所述第一管理器為SVN管理器,所述第二管理器為Git管理器。
在本發(fā)明實(shí)施例提供的方法及系統(tǒng)中,接收第一管理器發(fā)送的同步通知,該同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志;根據(jù)第二管理器的標(biāo)識和項(xiàng)目標(biāo)識,獲取項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件;根據(jù)第一管理器的標(biāo)識,從第一管理器獲取待同步代碼;將待同步代碼添加在項(xiàng)目文件中得到同步文件,將提交日志和同步文件發(fā)送給第二管理器。本發(fā)明在第一管理器和第二管理器之間添加中間服務(wù)器,通過中間服務(wù)器實(shí)現(xiàn)第一管理器與第二管理器之間的代碼同步,能夠?qū)崿F(xiàn)Git與SVN之間的代碼同步,使采用SVN的公司中的開發(fā)人員可以使用Git作為代碼管理工具。
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能更明顯易懂,下文特舉較佳實(shí)施例,并配合所附附圖,作詳細(xì)說明如下。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例中所需要使用的附圖作簡單地介紹,應(yīng)當(dāng)理解,以下附圖僅示出了本發(fā)明的某些實(shí)施例,因此不應(yīng)被看作是對范圍的限定,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他相關(guān)的附圖。
圖1示出了本發(fā)明實(shí)施例1所提供的一種代碼同步方法的流程圖;
圖2示出了本發(fā)明實(shí)施例1所提供的一種Git與SVN之間代碼同步的系統(tǒng)架構(gòu)圖;
圖3示出了本發(fā)明實(shí)施例2所提供的一種代碼同步方法的流程圖;
圖4示出了本發(fā)明實(shí)施例3所提供的一種代碼同步方法的流程圖;
圖5示出了本發(fā)明實(shí)施例4所提供的一種代碼同步系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。通常在此處附圖中描述和示出的本發(fā)明實(shí)施例的組件可以以各種不同的配置來布置和設(shè)計。因此,以下對在附圖中提供的本發(fā)明的實(shí)施例的詳細(xì)描述并非旨在限制要求保護(hù)的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實(shí)施例?;诒景l(fā)明的實(shí)施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
考慮到相關(guān)技術(shù)中Git與SVN無法實(shí)現(xiàn)同步代碼管理,導(dǎo)致使用SVN的公司的開發(fā)人員無法使用Git來管理代碼?;诖?,本發(fā)明實(shí)施例提供了一種代碼同步方法及系統(tǒng),下面通過實(shí)施例進(jìn)行描述。
實(shí)施例1
本發(fā)明實(shí)施例提供了一種代碼同步方法。
該方法所基于的系統(tǒng)包括第一管理器、中間服務(wù)器和第二管理器,正是由于在第一管理器與第二管理器之間添加了中間服務(wù)器,才能夠?qū)崿F(xiàn)在第一管理器和第二管理器之間的代碼同步。在進(jìn)行代碼同步操作之前,中間服務(wù)器需要生成數(shù)字證書,該數(shù)字證書用于與第一管理器和第二管理器進(jìn)行通信。中間服務(wù)器生成數(shù)字證書之后,將該數(shù)字證書配置在第一管理器和第二管理器上。之后每次中間服務(wù)器在與第一管理器和第二管理器進(jìn)行通信時都攜帶該數(shù)字證書,通過該數(shù)字證書與第一管理器和第二管理器之間進(jìn)行證書通訊,既保證第一管理器和第二管理器的安全,又可以保證中間服務(wù)器與第一管理器及第二管理器之間可以正常通訊。
在進(jìn)行代碼同步過程中,中間服務(wù)器需要對本地文件進(jìn)行讀寫,因此在通過上述系統(tǒng)進(jìn)行代碼同步之前,中間服務(wù)器還執(zhí)行權(quán)限賦予指令,獲得本地文件的讀寫權(quán)限。
第一管理器和第二管理器都具備hook(鉤子)功能,第一管理器和第二管理器通過hook功能建立與中間服務(wù)器之間的通信連接。第一管理器和第二管理器都具備hook建立器,在通過上述系統(tǒng)進(jìn)行代碼同步之前,通過第一管理器上的hook建立器在第一管理器中建立hook,以及通過第二管理器上的hook建立器在第二管理器中建立hook。
上述中間服務(wù)器生成數(shù)字證書,并將該數(shù)字證書配置在第一管理器和第二管理器上,以及賦予中間服務(wù)器對本地文件的讀寫權(quán)限,并分別在第一管理器和第二管理器上建立hook之后,就建立起了由第一管理器、中間服務(wù)器及第二管理器組成的代碼同步系統(tǒng)?;诮⑵鸬拇a同步系統(tǒng),通過本發(fā)明實(shí)施例提供的方法可以實(shí)現(xiàn)第一管理器與第二管理器之間的代碼同步。
其中,中間服務(wù)器可以為PHP(Hypertext Preprocessor,超文本預(yù)處理器)服務(wù)器。第一管理器為Git管理器,第二管理器為SVN管理器。或者,第一管理器為SVN管理器,第二管理器為Git管理器。本發(fā)明實(shí)施例可以實(shí)現(xiàn)Git與SVN之間的代碼同步,使開發(fā)人員不用顧忌公司所使用的代碼管理工具,可以選用自己習(xí)慣使用的代碼管理工具。
參見圖1,該方法具體包括以下步驟:
步驟101:第一管理器發(fā)送同步通知給中間服務(wù)器,該同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志。
在本發(fā)明實(shí)施例中,第一管理器為開發(fā)人員所使用的代碼管理工具,對于一個開發(fā)項(xiàng)目,當(dāng)開發(fā)人員編寫出新的代碼時,這些新的代碼即為待同步代碼。開發(fā)人員在編寫待同步代碼的同時,還會編寫待同步代碼對應(yīng)的提交日志,該提交日志中可以包括待同步代碼對應(yīng)的編寫目的等信息。
開發(fā)人員編寫完待同步代碼和對應(yīng)的提交日志后,將待同步代碼和提交日志上傳給第一管理器。開發(fā)人員可以通過第一管理器提供的代碼提交界面上傳待同步代碼和提交日志,也可以通過編寫提交命令將待同步代碼和提交日志上傳給第一管理器。
當(dāng)開發(fā)人員編寫出待同步代碼及提交日志,并將待同步代碼和提交日志上傳給第一管理器時,第一管理器通過自身的hook發(fā)送同步通知給中間服務(wù)器,該同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志。其中,第一管理器的標(biāo)識可以為第一管理器的地址或設(shè)備序列號等,第二管理器的標(biāo)識可以為第二管理器的地址或設(shè)備序列號等,項(xiàng)目標(biāo)識可以為上述待同步代碼所屬項(xiàng)目的項(xiàng)目名稱。
在本發(fā)明實(shí)施例中,上述同步通知為一段json(javaScript object notation,輕量級數(shù)據(jù)交換格式)字符串。
第一管理器發(fā)送上述同步通知給中間服務(wù)器后,中間服務(wù)器先通過如下步驟102-106的操作,根據(jù)第二管理器的標(biāo)識和項(xiàng)目標(biāo)識,來獲取待同步代碼所屬項(xiàng)目的項(xiàng)目文件,即獲取同步通知攜帶的項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件。
步驟102:中間服務(wù)器接收第一管理器發(fā)送的同步通知,根據(jù)該同步通知攜帶的項(xiàng)目標(biāo)識,判斷本地內(nèi)存中是否存在該項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件,如果是,則執(zhí)行步驟103,如果否,則執(zhí)行步驟104。
在本發(fā)明實(shí)施例中,中間服務(wù)器執(zhí)行監(jiān)聽程序,實(shí)時監(jiān)聽是否接收到第一管理器或第二管理器發(fā)送的信息。當(dāng)?shù)谝还芾砥靼l(fā)送同步通知給中間服務(wù)器時,中間服務(wù)器的監(jiān)聽程序監(jiān)聽到該同步通知,該同步通知為包括第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志的json字符串。中間服務(wù)器調(diào)用解碼函數(shù)json_decode()將該json字符串轉(zhuǎn)換為json對象。后續(xù)通過調(diào)用該json對象進(jìn)行代碼同步操作。
中間服務(wù)器得到上述同步通知后,根據(jù)同步通知攜帶的項(xiàng)目標(biāo)識,查看本地內(nèi)存中存儲的項(xiàng)目標(biāo)識與項(xiàng)目文件的對應(yīng)關(guān)系中是否存在該項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件。
步驟103:中間服務(wù)器直接從本地內(nèi)存中獲取該項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件,然后執(zhí)行步驟107。
步驟104:中間服務(wù)器根據(jù)同步通知攜帶的第二管理器的標(biāo)識,發(fā)送獲取請求給第二管理器,該獲取請求攜帶該項(xiàng)目標(biāo)識。
當(dāng)中間服務(wù)器本地內(nèi)存中不存在該項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件時,中間服務(wù)器需從第二管理器獲取該項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件。
步驟105:第二管理器接收中間服務(wù)器發(fā)送的獲取請求,發(fā)送該項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件給中間服務(wù)器。
第二管理器接收上述獲取請求,根據(jù)該獲取請求攜帶的項(xiàng)目標(biāo)識,從項(xiàng)目標(biāo)識與項(xiàng)目文件的對應(yīng)關(guān)系中獲取對應(yīng)的項(xiàng)目文件,將獲取的項(xiàng)目文件返回給中間服務(wù)器。
步驟106:中間服務(wù)器接收第二管理器發(fā)送的項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件。
在本發(fā)明實(shí)施例中,假設(shè)第二管理器為SVN管理器,則中間服務(wù)器通過執(zhí)行函數(shù)exec(“svn checkout path”)來獲取項(xiàng)目文件。其中,path(路徑)則是同步通知攜帶的第二管理器的標(biāo)識。
通過上述步驟102-106的操作確保中間服務(wù)器本地內(nèi)存中存在項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件后,中間服務(wù)器通過如下步驟107-109從第一管理器獲取待同步代碼。
步驟107:中間服務(wù)器根據(jù)第一管理器的標(biāo)識,發(fā)送用于獲取代碼的獲取請求給第一管理器。
步驟108:第一管理器接收該獲取請求,傳輸待同步代碼給中間服務(wù)器。
在本發(fā)明實(shí)施例中,假設(shè)第一管理器為Git管理器,則中間服務(wù)器獲取到項(xiàng)目文件后,再執(zhí)行函數(shù)exec(“git clone…”)來執(zhí)行獲取待同步代碼。
步驟109:中間服務(wù)器接收第一管理器傳輸?shù)拇酱a,將待同步代碼添加在項(xiàng)目文件中得到同步文件。
在本發(fā)明實(shí)施例中,中間服務(wù)器從第一管理器獲取到待同步代碼后,將待同步代碼添加在項(xiàng)目文件中,實(shí)現(xiàn)第一管理器上的開發(fā)人員的代碼與第二管理器上的項(xiàng)目代碼合并,得到同步文件。
假設(shè)第一管理器為Git管理器,則執(zhí)行函數(shù)exec(“git pull”)將待同步代碼添加到項(xiàng)目文件中。
步驟110:中間管理器將提交日志和同步文件發(fā)送給第二管理器。
中間管理器根據(jù)第二管理器的標(biāo)識,將同步通知攜帶的提交日志和上述同步文件發(fā)送給第二管理器。
假設(shè)第二管理器為SVN管理器,則中間服務(wù)器執(zhí)行函數(shù)exec(“svn commit*”)將上述同步文件提交到SVN庫中,然后再執(zhí)行函數(shù)exec(“svn commit-m“提交日志”),將同步通知攜帶的提交日志提交到SVN庫中。
步驟111:第二管理器接收中間服務(wù)器發(fā)送的同步文件。
通過上述方式實(shí)現(xiàn)了將第一管理器上的待同步代碼同步至第二管理器中。本發(fā)明實(shí)施例中也可以將第二管理器中的待同步代碼同步至第一管理器中,此時相當(dāng)于第一管理器與第二管理器身份互換,原來的第二管理器執(zhí)行第一管理器的操作,原來的第一管理器執(zhí)行第二管理器的操作。
在本發(fā)明實(shí)施例中,為了避免步驟104-106的操作,加快代碼同步的速度,中間服務(wù)器還可以每隔預(yù)設(shè)時間段,從第二管理器獲取每個項(xiàng)目的項(xiàng)目標(biāo)識及項(xiàng)目文件,存儲每個項(xiàng)目的項(xiàng)目標(biāo)識與項(xiàng)目文件的對應(yīng)關(guān)系。從而確保中間服務(wù)器本地內(nèi)存中存儲有待同步代碼所屬項(xiàng)目的項(xiàng)目文件,進(jìn)而避免代碼同步時臨時從第二管理器獲取項(xiàng)目文件,提高代碼同步效率。
如圖2所示,本發(fā)明實(shí)施例可以實(shí)現(xiàn)Git管理器與SVN管理器之間的代碼同步,在Git管理器與SVN管理器之間添加PHP服務(wù)器進(jìn)行監(jiān)聽,開發(fā)人員提交待同步代碼到Git,SVN管理器進(jìn)行公共管理。
在本發(fā)明實(shí)施例中,接收第一管理器發(fā)送的同步通知,該同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志;根據(jù)第二管理器的標(biāo)識和項(xiàng)目標(biāo)識,獲取項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件;根據(jù)第一管理器的標(biāo)識,從第一管理器獲取待同步代碼;將待同步代碼添加在項(xiàng)目文件中得到同步文件,將提交日志和同步文件發(fā)送給第二管理器。本發(fā)明在第一管理器和第二管理器之間添加中間服務(wù)器,通過中間服務(wù)器實(shí)現(xiàn)第一管理器與第二管理器之間的代碼同步,能夠?qū)崿F(xiàn)Git與SVN之間的代碼同步,使采用SVN的公司中的開發(fā)人員可以使用Git作為代碼管理工具。
實(shí)施例2
參見圖3,本發(fā)明實(shí)施例提供了一種代碼同步方法,該方法的執(zhí)行主體為上述實(shí)施例1所提供代碼同步方法中的中間服務(wù)器,該方法具體包括以下步驟:
步驟201:接收第一管理器發(fā)送的同步通知,該同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志。
步驟202:根據(jù)第二管理器的標(biāo)識和項(xiàng)目標(biāo)識,獲取項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件。
步驟203:根據(jù)第一管理器的標(biāo)識,從第一管理器獲取待同步代碼。
步驟204:將待同步代碼添加在項(xiàng)目文件中得到同步文件,將提交日志和同步文件發(fā)送給第二管理器。
上述根據(jù)第二管理器的標(biāo)識和項(xiàng)目標(biāo)識,獲取項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件,包括:
根據(jù)項(xiàng)目標(biāo)識,判斷本地內(nèi)存中是否存在項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件;
如果是,直接從本地內(nèi)存中獲取項(xiàng)目文件;
如果否,則根據(jù)第二管理器的標(biāo)識,發(fā)送獲取請求給第二管理器,獲取請求攜帶項(xiàng)目標(biāo)識,接收第二管理器發(fā)送的項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件。
在本發(fā)明實(shí)施例中,接收第一管理器發(fā)送的同步通知之前,還包括:
生成數(shù)字證書,數(shù)字證書用于與第一管理器和第二管理器進(jìn)行通信;
執(zhí)行權(quán)限賦予指令,獲得本地文件的讀寫權(quán)限。
為了避免臨時從第二管理器獲取項(xiàng)目文件,本發(fā)明實(shí)施例中還每隔預(yù)設(shè)時間段,從第二管理器獲取每個項(xiàng)目的項(xiàng)目標(biāo)識及項(xiàng)目文件,存儲每個項(xiàng)目的項(xiàng)目標(biāo)識與項(xiàng)目文件的對應(yīng)關(guān)系。
在本發(fā)明實(shí)施例中,第一管理器為Git管理器,第二管理器為SVN管理器;或者,第一管理器為SVN管理器,第二管理器為Git管理器。
在本發(fā)明實(shí)施例中,接收第一管理器發(fā)送的同步通知,該同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志;根據(jù)第二管理器的標(biāo)識和項(xiàng)目標(biāo)識,獲取項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件;根據(jù)第一管理器的標(biāo)識,從第一管理器獲取待同步代碼;將待同步代碼添加在項(xiàng)目文件中得到同步文件,將提交日志和同步文件發(fā)送給第二管理器。本發(fā)明在第一管理器和第二管理器之間添加中間服務(wù)器,通過中間服務(wù)器實(shí)現(xiàn)第一管理器與第二管理器之間的代碼同步,能夠?qū)崿F(xiàn)Git與SVN之間的代碼同步,使采用SVN的公司中的開發(fā)人員可以使用Git作為代碼管理工具。
實(shí)施例3
參見圖4,本發(fā)明實(shí)施例提供了一種代碼同步方法,該方法的執(zhí)行主體為實(shí)施例1所提供的代碼同步方法中的第一管理器,該方法具體包括以下步驟:
步驟301:發(fā)送同步通知給中間服務(wù)器,該同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志。
步驟302:當(dāng)接收到中間服務(wù)器獲取代碼的獲取請求時,傳輸待同步代碼給中間服務(wù)器,以使中間服務(wù)器將待同步代碼同步至第二管理器中。
通過上述方式將第一管理器中的待同步代碼同步至第二管理器中。本發(fā)明實(shí)施例中還可以將第二管理器中的待同步代碼同步至第一管理器中,此時第二管理器執(zhí)行上述步驟301和302的操作,而第一管理器當(dāng)接收到中間服務(wù)器發(fā)送的攜帶項(xiàng)目標(biāo)識的獲取請求時,發(fā)送項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件給中間服務(wù)器;接收中間服務(wù)器發(fā)送的同步文件。
在本發(fā)明實(shí)施例中,第一管理器為Git管理器,第二管理器為SVN管理器;或者,第一管理器為SVN管理器,第二管理器為Git管理器。
在本發(fā)明實(shí)施例中,接收第一管理器發(fā)送的同步通知,該同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志;根據(jù)第二管理器的標(biāo)識和項(xiàng)目標(biāo)識,獲取項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件;根據(jù)第一管理器的標(biāo)識,從第一管理器獲取待同步代碼;將待同步代碼添加在項(xiàng)目文件中得到同步文件,將提交日志和同步文件發(fā)送給第二管理器。本發(fā)明在第一管理器和第二管理器之間添加中間服務(wù)器,通過中間服務(wù)器實(shí)現(xiàn)第一管理器與第二管理器之間的代碼同步,能夠?qū)崿F(xiàn)Git與SVN之間的代碼同步,使采用SVN的公司中的開發(fā)人員可以使用Git作為代碼管理工具。
實(shí)施例4
參見圖5,本發(fā)明實(shí)施例提供了一種代碼同步系統(tǒng),該系統(tǒng)用于執(zhí)行上述實(shí)施例1所提供的代碼同步方法。該系統(tǒng)包括第一管理器401、中間服務(wù)器402和第二管理器403;
第一管理器401,用于發(fā)送同步通知給中間服務(wù)器402,當(dāng)接收到中間服務(wù)器402獲取代碼的獲取請求時,傳輸待同步代碼給中間服務(wù)器402,同步通知攜帶第一管理器401的標(biāo)識、第二管理器403的標(biāo)識、項(xiàng)目標(biāo)識和提交日志;
中間服務(wù)器402,用于接收同步通知,根據(jù)第二管理器403的標(biāo)識和項(xiàng)目標(biāo)識,獲取項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件;根據(jù)第一管理器401的標(biāo)識,從第一管理器401獲取待同步代碼;將待同步代碼添加在項(xiàng)目文件中得到同步文件,將提交日志和同步文件發(fā)送給第二管理器403;
第二管理器403,用于當(dāng)接收到中間服務(wù)器402發(fā)送的攜帶項(xiàng)目標(biāo)識的獲取請求時,發(fā)送項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件給中間服務(wù)器402;接收中間服務(wù)器402發(fā)送的同步文件。
第一管理器401為Git管理器,第二管理器403為SVN管理器;或者,第一管理器401為SVN管理器,第二管理器403為Git管理器。
本發(fā)明實(shí)施例中,第一管理器401、中間服務(wù)器402和第二管理器403的具體操作細(xì)節(jié)均分別與實(shí)施例1中提到的第一管理器、中間服務(wù)器和第二管理器的操作相同,在此不再贅述。
在本發(fā)明實(shí)施例中,接收第一管理器發(fā)送的同步通知,該同步通知攜帶第一管理器的標(biāo)識、第二管理器的標(biāo)識、項(xiàng)目標(biāo)識和提交日志;根據(jù)第二管理器的標(biāo)識和項(xiàng)目標(biāo)識,獲取項(xiàng)目標(biāo)識對應(yīng)的項(xiàng)目文件;根據(jù)第一管理器的標(biāo)識,從第一管理器獲取待同步代碼;將待同步代碼添加在項(xiàng)目文件中得到同步文件,將提交日志和同步文件發(fā)送給第二管理器。本發(fā)明在第一管理器和第二管理器之間添加中間服務(wù)器,通過中間服務(wù)器實(shí)現(xiàn)第一管理器與第二管理器之間的代碼同步,能夠?qū)崿F(xiàn)Git與SVN之間的代碼同步,使采用SVN的公司中的開發(fā)人員可以使用Git作為代碼管理工具。
本發(fā)明實(shí)施例所提供的系統(tǒng),其實(shí)現(xiàn)原理及產(chǎn)生的技術(shù)效果和前述方法實(shí)施例相同,為簡要描述,系統(tǒng)實(shí)施例部分未提及之處,可參考前述方法實(shí)施例中相應(yīng)內(nèi)容。所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,前述描述的系統(tǒng)的具體工作過程,均可以參考上述方法實(shí)施例中的對應(yīng)過程,在此不再贅述。
在本發(fā)明所提供的實(shí)施例中,應(yīng)該理解到,所揭露系統(tǒng)和方法,可以通過其它的方式實(shí)現(xiàn)。以上所描述的系統(tǒng)實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時可以有另外的劃分方式,又例如,多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些通信接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明提供的實(shí)施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨(dú)物理存在,也可以兩個或兩個以上單元集成在一個單元中。
所述功能如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時,可以存儲在一個計算機(jī)可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實(shí)施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機(jī)存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
應(yīng)注意到:相似的標(biāo)號和字母在下面的附圖中表示類似項(xiàng),因此,一旦某一項(xiàng)在一個附圖中被定義,則在隨后的附圖中不需要對其進(jìn)行進(jìn)一步定義和解釋,此外,術(shù)語“第一”、“第二”、“第三”等僅用于區(qū)分描述,而不能理解為指示或暗示相對重要性。
最后應(yīng)說明的是:以上所述實(shí)施例,僅為本發(fā)明的具體實(shí)施方式,用以說明本發(fā)明的技術(shù)方案,而非對其限制,本發(fā)明的保護(hù)范圍并不局限于此,盡管參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),其依然可以對前述實(shí)施例所記載的技術(shù)方案進(jìn)行修改或可輕易想到變化,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改、變化或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明實(shí)施例技術(shù)方案的精神和范圍。都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。