徐婭
摘 要:在大型團隊協(xié)作項目中,對源代碼和文檔進行版本控制是有必要的,本文對版本控制以及Git如何在團隊協(xié)作中使用進行了探討。
關鍵詞: Git;版本控制;團隊協(xié)作
【Abstract】 In large-scale team collaborative projects, it is necessary to realize version control of the source code and documents. This paper discusses version control and the use mode of ?Git in team collaboration.
【Key words】 ?Git; version control; team collaboration
0 引 言
隨著社會發(fā)展與科技進步,軟件的功能漸趨復雜,在一個軟件項目開發(fā)的過程中,團隊協(xié)作必不可少。因為團隊的每個成員有著不同的興趣和擅長的領域,所有的工作都需要分工并行,這種情況下就需要一種技術。該技術可以跟蹤和記錄每位團隊成員對文檔與代碼的更改,輔助團隊成員進行多個版本分支的協(xié)同開發(fā)及維護,最終合并到主分支進行部署和發(fā)布。此種技術就是版本控制技術,而Git就是一種版本控制工具。
1 ?版本控制
1.1 版本控制簡介
版本的概念最早在印刷行業(yè)出現(xiàn),由于編輯、印刷不同而衍生出不同樣式和內(nèi)容,產(chǎn)生了不同的成品,這就是版本。版本控制技術是一種可以記錄一個或多個文件在修改過程中的變化,使得后續(xù)可以查閱文件的歷史版本的技術。當一個項目的代碼量達到一定規(guī)模時,對源代碼的管理難度和重要性也會隨即增加。使用版本控制可以有效地管理和維護軟件的項目開發(fā),因其保存了從項目研發(fā)開始到結束的所有歷史提交和修改記錄。
1.2 版本控制操作
在一個項目從開始需求分析起,歷經(jīng)設計、代碼實現(xiàn)、測試和維護的所有環(huán)節(jié)的整個過程中,會產(chǎn)生不同版本的源代碼和文檔,此時可以對不同版本進行一系列操作,對此可做探討分述如下。
(1)版本生成。在團隊協(xié)作的過程中,每位成員可以將自己修改好的文件生成一個新的版本。
(2)版本提交。生成后的版本可以提交到遠程,但需要進行合并沖突的審核。
(3)版本審核。團隊成員可能對文件的同一處內(nèi)容進行了修改,這個時候文件的合并就會產(chǎn)生沖突,因此要進行版本審核。
(4)版本修改。提交的版本若是沒有通過審核,則要進行修改。
(5)版本提取。如果版本的修改發(fā)生了錯誤,就要恢復到之前的版本,此時可以使用版本提取,恢復為版本之前的狀態(tài)。
(6)版本比較。在合并版本的過程中,常常需要對版本進行比較,來選取一個最佳版本進行恢復。比較的方式有2種。一種是通過時間進行比較,一種是通過空間進行比較。其中,通過時間進行比較是指用戶可以對比不同時間發(fā)布的修改內(nèi)容,通過空間進行比較是指比較版本的不同分支。
(7)版本合并。對于同一個文件,不同的團隊成員可能會產(chǎn)生各自的修改,因而可以將處于不同分支的成員的修改進行合并。
1.3 版本控制的優(yōu)勢
(1)方便代碼管理。版本控制技術可以避免代碼被項目組其它成員無意間覆蓋,還可以避免代碼的遺失。版本控制技術可以對不同版本進行跟蹤、記錄和標識,也可以恢復到用戶所需的版本。
(2)自動化。傳統(tǒng)的版本管理可以采用如下方法:將自己的文件生成一個副本,將改動的時間點保存,并加上一個版本號,這種形式雖然方便,但是效率低下,因為不同文件的內(nèi)容十分接近,不易找出兩者之間的差異,如果通過人工記憶多個版本之間的差異,一段時間后也容易產(chǎn)生混淆,而版本控制可以做到版本之間差異的自動化比較,無需人工進行查找。另外,在解決沖突時,如果沒有版本控制工具,每一位成員需要自己對沖突文檔予以逐行查閱,這大大增加了工作量,并且在修改的過程中若是不慎還容易帶來新的問題,因此版本控制在解決沖突時也更為方便。
(3)實現(xiàn)了分工和并行??臻g上統(tǒng)一管理,時間上全程記錄。版本控制技術對團隊協(xié)作項目的開發(fā)有輔助作用,一個大型的軟件項目的任務往往是分工并行協(xié)作的,需要多個人同時修改一個文件,而版本控制技術實現(xiàn)了團隊成員任務在不同地域的同步開發(fā),突破了時間和空間的局限,因此大大縮短了項目開發(fā)的周期,提高了項目研發(fā)的效率。
(4)訪問控制??梢宰柚刮唇?jīng)授權的更改和查看。如果所有的成員都可以不受任何限制地進行代碼的添加、修改和刪除操作,沒有明確的代碼管理人,將會帶來嚴重的后果。
1.4 版本控制系統(tǒng)分類
版本控制系統(tǒng)分為2類。一類是集中式版本控制系統(tǒng),另一類是分布式版本控制系統(tǒng)。其中,集中式版本控制系統(tǒng)是指軟件項目的所有代碼的修改和提交都存儲在一臺中央服務器,本地的版本控制系統(tǒng)只保存最新的文件快照,所以每位開發(fā)人員在開始工作前,必須要從中央服務器同步最新的項目版本數(shù)據(jù)信息來避免版本沖突。集中式版本控制系統(tǒng)的缺點就是對中央服務器的依賴性很高,中央服務器的單點故障將會帶來嚴重的后果。如果中央服務器出現(xiàn)宕機,所有人都無法進行文件更新的提交;如果中央服務器的硬盤出現(xiàn)損壞,那么就可能永久性地丟失所有的存儲信息。與集中式版本控制系統(tǒng)相對應的是分布式版本控制系統(tǒng),這是指每個參與者都在本地有自己的版本庫,而且也沒有中央服務器,對代碼的修改信息除了保存在遠程倉庫,每個參與者在本地都有自己的一份完整的鏡像文件,即使服務器出現(xiàn)了巨大的損壞,也可以通過鏡像文件進行恢復,而且,同時也支持著離線工作。
1.5 Git
Git是一種典型的分布式版本控制系統(tǒng),為了更好地管理Linux內(nèi)核,在2005年由Linus Torvalds首次提出。Git具有使用簡便、開源、速度快、保護數(shù)據(jù)完整性的特點,并且提供了對非線性開發(fā)模式的支持,有強大的分支管理能力,允許上千個分支同步并行開發(fā),分支的開發(fā)不影響主分支。首先,軟件項目的開發(fā)過程可能會經(jīng)常出現(xiàn)功能和性能上的問題,漏洞是可追溯的,出現(xiàn)在某些版本中。使用Git的分支管理功能,通過檢查不同版本,定位版本的漏洞的位置,再對這個版本的漏洞進行修復。其次,可以利用一個新的創(chuàng)建分支對軟件進行測試性修改,用來驗證本文設計的新算法是否可以讓文中的軟件項目給用戶帶來更好的使用體驗,最后,可以利用Git的分支管理功能在不同的分支上給軟件設計不同的功能,因此各個功能相互獨立,如果后續(xù)研發(fā)中不再需要此項功能,可以回退到之前的版本,其它的功能分支也不會因此受到影響。Git采用快照模式,也就是說Git記錄數(shù)據(jù)在某個時間點的映像,而不是記錄提交前后數(shù)據(jù)的具體差異,并且采用校驗和壓縮,因此恢復起文件來要更為快速。Git再通過SHA-1算法對數(shù)據(jù)內(nèi)容進行校驗和計算,并將結果作為數(shù)據(jù)唯一的標識,所以,Git可以檢測得到任何數(shù)據(jù)的修改和刪除,這保證了數(shù)據(jù)的完整性。Git憑借自身的卓越性能,已廣泛地應用于眾多的著名開源項目,如Ruby on Rails、Perl、Eclipse等,是大型項目開發(fā)的首選工具。
1.6 Gitee
目前,隨著版本控制系統(tǒng)的不斷發(fā)展和完善,產(chǎn)生了品類眾多的衍生品,其中之一就是代碼托管平臺。人們可以在代碼托管平臺上對代碼進行下載,也可以將自己的代碼交付給代碼托管平臺進行托管。比較著名的代碼托管平臺有GitHub和Gitee,Gitee又叫碼云,是由開源中國社區(qū)在2013年推出的基于Git的代碼免費托管服務。該服務基于GitLab、且又在其基礎上做了大量的改進和定制開發(fā),而與GitHub比起來則擁有更快的訪問速度,當前的開發(fā)者超過 300 萬,托管項目超過 500萬,匯聚了本土的幾乎所有原創(chuàng)開源項目,并于 2016 年推出企業(yè)版,提供企業(yè)級代碼托管服務,成為開發(fā)領域領先的 SaaS 服務提供商,也是目前國內(nèi)最大的代碼托管系統(tǒng)。Gitee除了提供最基礎的代碼托管之外,還提供代碼在線查看、歷史版本查看、Fork、Pull Request、打包下載任意版本、Issue、Wiki、保護分支、代碼質(zhì)量檢測、PaaS項目演示等方便管理、開發(fā)、協(xié)作、共享的功能。對于一個開發(fā)者來說,一個代碼托管平臺必不可少,在使用Git進行團隊協(xié)作項目的版本管理時,也需要和團隊其它成員共同使用Gitee來對項目的倉庫進行管理。
2 Git在團隊協(xié)作中的使用
2.1 使用過程
(1)每一位團隊成員進入Gitee官網(wǎng)(https://www.gitee.com/)注冊一個賬號,并生成自己的SSH Key。
(2)團隊中一位成員git init在本地建立項目倉庫,并使用git remote add origin git將遠程倉庫和本地倉庫相關聯(lián)。將其它成員的SSH Key添加到Gitee。
(3)團隊中的其它成員使用git clone命令將遠程倉庫的項目復制到本地,可使用多種網(wǎng)絡協(xié)議,如SSH 協(xié)議、https協(xié)議。研究可知,SSH協(xié)議的速度最快。
(4)對項目文件進行修改,將只會限定在自己的分支上,使用git commit在本地進行提交,這樣就把修改保存到了暫存區(qū),如果是暫存區(qū)還沒有的文件,則需要使用git add將項目文件先添加到暫存區(qū)。
(5)使用git push命令將暫存區(qū)的文件推送到遠程倉庫。如果團隊的其它成員在遠程分支上有了更新的提交,則需要使用git pull將屬于同一項目的遠端倉庫與同樣屬于同一項目的本地倉庫進行合并,該過程包含了2個操作:從遠端倉庫中取出更新版本,再合并到本地倉庫。如果合并發(fā)生了沖突,則先解決沖突并在本地提交。
(6)每位個體的工作應避免直接在主分支上展開,當每個人的項目有必要加以合并時進行分支合并,發(fā)布這個版本,這個版本是較為穩(wěn)定的。
2.2 協(xié)作過程中的沖突解決和避免
代碼沖突是多人協(xié)作開發(fā)過程中最常見的問題,一旦解決不當,會引發(fā)代碼丟失或者業(yè)務功能異常等問題,所以在系統(tǒng)功能設計上,要做到功能解耦,并且在不同的文件中實現(xiàn)不同的功能。Git會提示合并發(fā)生了沖突,此時可以得知發(fā)生沖突的文件,Git還會通過不同的符號來標記不同分支的內(nèi)容,故而用戶將需要手動解決沖突。在開發(fā)過程中,也要培養(yǎng)良好的開發(fā)習慣,如果必須面臨多位成員同時修改一個文件的情況,則每一位成員要定期執(zhí)行Git pull命令,如果出現(xiàn)了沖突則要盡早解決,隨著沖突解決時間的延長,沖突解決的難度也會隨之增大。
2.3 不同團隊人數(shù)的協(xié)作模式探討
在不同的團隊人數(shù)下,可以采用不同的協(xié)作模式。當團隊人數(shù)為2時,如果2個人中有一個人A為主要開發(fā)者,另外一個人B為輔助者,假設A的機器地址為a,B的機器地址為b,項目的倉庫建立在A 的機器上,2個人的工作在A的機器上合并,則B可以通過git clone將遠程倉庫的項目復制到本地,而A 執(zhí)行git pull b將遠程倉庫合并到本地。但當團隊人數(shù)為3及以上時,假設第三位開發(fā)者為C,機器地址為c,如果C和B采取一樣的操作,則A需要執(zhí)行git pull c和git pull c命令將倉庫合并,此時A的工作量相對較大。如是A只負責本地倉庫,而B和C先執(zhí)行git pull a,再執(zhí)行git push,則B和C的工作量較大,因此較為合適的方法就是將項目倉庫建立在實驗室的服務器上,A通過SSH登錄服務器后,建立一個目錄,初始化一個空倉庫,并將自己本地已經(jīng)接受git管理的倉庫推送到遠程,B和C再通過git clone將遠程倉庫的項目復制到本地,則服務器上的倉庫會記錄每一位用戶涉及的版本更新提交,因此,提取和推送的工作并不會總是由一人或兩個人來進行。綜上可知,這種模式分擔了團隊其它成員的工作量。
3 結束語
在團隊協(xié)作項目中,使用Git進行版本控制,減少了開發(fā)者大量不必要的工作,可以對項目進行高效的管理。如果沒有版本控制工具,任何一種不可逆的操作都會給版本的回退帶來困難。Git保證了版本的可溯性,并且可以在某個版本的測試和使用的過程中出現(xiàn)問題時可以盡早定位問題發(fā)生的時間節(jié)點、原因和負責人。一個復雜的項目常常會遇到頻繁地修改源代碼的場景,使用Git進行版本控制可以有針對性地解決源代碼混亂的問題。Git分布式特性和分支管理能力使得大型軟件項目尤為適合使用Git,每個分支彼此獨立,互不影響。Git免費、開源的特點正吸引著來自世界各地的大量優(yōu)秀開發(fā)人才。Git有著可觀的應用潛力,而且勢必會不斷地趨于成熟與完善。
參考文獻
[1]秦佳. 軟件配置管理中版本控制的研究[J]. 軟件,2019,40(3):137-139.
[2]李志杰. 版本控制技術在團隊協(xié)同開發(fā)中的應用研究[J]. 現(xiàn)代商貿(mào)工業(yè),2012(14):168-169.
[3]朱守園,王婷. 基于GIT的軟件開發(fā)模式探究[J]. 信息通信,2017(3):117-118.
[4]字鳳芹. 基于Git的協(xié)作小組學習資源庫的建設與研究[D]. 昆明:云南大學,2016.
[5]王遠. 基于MFS的校園安全同步網(wǎng)盤設計與實現(xiàn)[D]. 長沙:國防科學技術大學,2013.
[6]諸葛文社.Git倉庫代碼演化過程中的注解定位技術研究[D].南京:南京郵電大學,2018.