代碼版本管理系統的歷史
代碼版本管理系統大致可分為三個時代:
**代:本地風格git和svn哪個好用。
這一代的主要特征是提供本地代碼版本控制,如SCCS()、PVCS()等。
這一代人主要實現了基本的代碼版本管理,但缺點是很多人無法同時修改一個版本庫。這也與當時軟件規模不夠大有關,沒有這樣的需求。
第二代:客戶端-服務器式
這一代的主要特點是提供集中式服務器端代碼版本控制,如CVS(),ClearCase(),VisualSourceSafe(),Perforce(),Subversion()等。
這一代主要實現了**服務器端的代碼版本管理,其特點是允許多人同時同步和修改代碼版本庫,但缺點也相當明顯:
當服務器無法連接時,無法查看日志、提交和比較代碼版本(慢速網絡和遠程程程序員的疼痛),以及當服務或網絡出現問題時,許多人將無法工作。
不支持localbranch,branch創建管理復雜,一旦創建,就很難修改(程序員在快速迭發中的痛苦)
因為只有一個中心端服務器,一旦發生災難性問題,所有日志都會丟失,所以需要經常備份(備份成本不小)
如果軟件代碼太大,速度通常會很慢,因為每個日志查詢、不同版本之間的代碼比較和代碼提交都需要與服務器通信,導致服務器端負載過大。為什么用svn不用git。
第三代:分布式git和svn收費。
這一代的主要特點是提供分布式代碼版本控制,如Git(),Mercurial()等。
這一代結合了**代和第二代的優勢,實現了分布式代碼版本管理。
這一代的優勢:分布式管理,在沒有連接到服務器的情況下,仍然可以查看日志,提交代碼,創建分支機構;支持localbranch,各種分支管理可以快速方便地實現;支持分布式,實現分塊管理和負載分流管理。
缺點是有一定的學習曲線,如分布下的代碼同步,localbranch理解與應用,分布式代碼管理的理解與應用等。詳細比較可參考:此處。
二、大型分布式團隊
曾經有這樣一個分布式團隊,他們在很多城市都有小團隊,正在開發一個大型項目,如下圖所示
他們使用的代碼版本管理工具是第二代碼管理工具SVN,管理方案如下:svn與git的優缺點及區別。
但他們在使用過程中遇到了以下問題和痛點。
因為是分布式團隊,所以:svn和perforce。
基于團隊的代碼模塊難以分離
當服務器不可用時:git跟svn的區別。
無法查看提交記錄
無法比較文件
不能提交代碼
創建代碼分支時:idea如何導入gradle項目。
分支創建速度慢
多分支管理困難
提交代碼時:
希望有CodeReviewsvn和Git企業哪個用的多。
希望有CIReview
因為代碼巨大:svn版本回溯。
查看日志慢syncthing與git區別。
備份代碼庫時:
需要停機備份
備份成本高
新一代分布式代碼版本管理系統可用于解決上述問題,如下圖所示:idea插件安裝在哪個目錄。
每個團隊都有自己獨立的代碼庫,中心庫用于同步這些獨立的代碼庫,每個庫由團隊管理和維護。此外,代碼版本管理系統還需要支持輕量級分支、代碼評審、離線提交、離線查看日志等功能。
然而,由于目前還沒有一個單一的代碼版本管理工具可以同時滿足上述所有需求,許多公司基于它們開發集成管理系統,如Gerrit,GitLab,GitHub,BitBucket等。由于Gerrit的開源、免費、Gogle的開發和維護,以及管理Android,OpenStack大型項目源代碼等特點已成為大型分布式團隊的**系統。
三、Gerritgit軟件版本管理。
GerritGoogle開發,用于管理GoogleAndroid一個系統的項目源代碼。以Java和為基礎Prolog等待開發,支持Git,綜合管理系統,如權限管理、代碼評審等。與Gitlab和GitHub**的區別是,它隱藏了代碼庫管理的細節,使開發人員可以開發和提交代碼,而無需進行fork等手動庫和同步操作,節省了開發人員的時間,如下圖所示。svn與本地文件對比。
因為安卓本身就是一個開源項目,貢獻者很多,開發團隊遍布很多地方(有時差),導致“如何保證代碼質量”成為一個大問題。為此,谷歌在Gerrit增加了一個功能強大、非常嚴格的代碼評審系統。
首先,當代碼提交時,它不會直接傳輸到**數據庫。它將暫時存儲在臨時數據庫中,生成代碼評審記錄,并向特定的評審人員發送要求評審的電子郵件。評審員評審代碼時,如果通過,需要在Gerrit系統中對代碼進行評分。如果通過,可以將代碼merge轉移到中心庫。如果沒有通過,則需要將代碼提交返回開發人員進行修改。svn是什么工具。
同時,它還可以自動觸發包含代碼提交的CI構建(如果需要手動預配置)。如果CI自動構建和測試通過,也可以自動在Gerit系統中進行評分,供最終Merge人員參考。示意流程見下圖。
由于Android源代碼由數百個獨立的代碼庫組成,編譯Android系統需要大多數代碼庫中的代碼,因此如何管理這么多代碼庫也是一個難題,例如如何一次性同步需要編譯需要支持特定設備的代碼庫組合。為此,Google基于Python語言開發了一種叫做工具的工具Repo,該工具可以定制您需要的代碼庫的組合,并同步這些代碼庫,如pull和push,見下圖。
四、SVN遷移到Git
對于想要從集中代碼管理系統轉移到分布式代碼管理系統的團隊來說,如果團隊規模小,問題一般不大,但對于大型分布式團隊來說很困難。主要有兩個困難:
代碼量太大,很難在短時間內成功遷移所有代碼和日志。什么是svn。
由于下屬團隊太多,所有團隊很難同時切換到新的代碼管理工具。idea安裝gradle。
為了解決這些問題,通常首先選擇一個團隊來使用新的代碼版本管理工具。如果團隊成功轉換,將其作為基準推廣給其他團隊,從而逐步將所有團隊轉換為新工具。
SVN兩種工具通常用于Git的遷移方案:
開源免費的git-svn;
商業收費的Subgit。
Subgit的遷移方案如下圖所示:
如果團隊組有足夠的資源,也可以使用Gerit構建獨立的Git服務器,以分布式方式遷移代碼,如下圖所示:
五、管理多產品線svn卸載再安裝。
使用同一中心代碼庫管理多產品線一直是大型項目的難點,尤其是使用SVN等工具,因為SVN的Branch本質上是目錄副本,速度慢,代碼返回也需要手動進行。但是如果用Git的特點來管理多產品線,比SVN事半功倍。具體方案如下圖所示:分布式代碼版本管理系統不一定適合所有團隊。例如,中小型團隊可能更關心成本低、易于使用,因此SVN等集中版本管理工具更合適。但無論團隊最終選擇什么代碼版本的管理工具,只要適合自己團隊的開發過程和工作模式,代碼管理順利。git commit和push的區別。
中企動力是一家專業的網絡推廣公司,我們擁有豐富的網絡推廣經驗和專業的團隊,能夠為企業提供全方位的網絡推廣服務。我們為企業提供網站建設、網站優化、平臺推廣等服務,幫中企動力業在網絡上提升知名度、擴大影響力、提升銷售額。如果您有網絡推廣的需求,歡迎聯系中企動力加微信:CE4006608066,我們將竭誠為您服務。