根據(jù)最新的調(diào)查數(shù)據(jù),高達(dá) 93.87% 的開發(fā)者選擇使用 Git 作為他們的代碼版本控制系統(tǒng)。然而,令人驚訝的是,在2024年依然有少數(shù)知名公司并未采用 Git。據(jù)悉,F(xiàn)acebook 選擇的是 Mercurial,而 Google 則青睞于Piper。那么,這些行業(yè)巨頭為何選擇不隨大流,轉(zhuǎn)而采用其他版本管理系統(tǒng)呢?這些系統(tǒng)又各自具備哪些獨(dú)特之處呢?接下來,本文將深入探討這些問題。
圖片
Git 是一個(gè)分布式版本控制系統(tǒng),用于跟蹤代碼的變化并協(xié)調(diào)多個(gè)開發(fā)人員在同一項(xiàng)目上的工作。Git 是由 Linus Torvalds 為了管理 Linux 內(nèi)核開發(fā)而創(chuàng)建的,如今已經(jīng)成為開源項(xiàng)目中最流行的版本控制系統(tǒng),沒有之一。
Facebook最初選擇了Git,但在代碼規(guī)模急劇增長后,他們開始遭遇Git性能方面的限制。特別是在執(zhí)行類似"stat"的操作時(shí),隨著文件數(shù)量的增加,Git的性能開始變慢。盡管團(tuán)隊(duì)嘗試聯(lián)系Git項(xiàng)目的維護(hù)者以改進(jìn)這些問題,但最終他們決定不再依賴Git,并轉(zhuǎn)而選擇了Mercurial,因?yàn)镸ercurial的架構(gòu)更加干凈,且在面對大型monorepo時(shí)性能較好。Facebook也曾考慮過其他備選方案,比如閉源的Perforce和Bitkeeper,但最終選擇了Mercurial,因?yàn)槠湫阅芘cGit相當(dāng),而且有清晰的架構(gòu),易于擴(kuò)展。
Mercurial 是一個(gè)分布式版本控制系統(tǒng),用于跟蹤項(xiàng)目的變化和管理文件的歷史記錄。它允許開發(fā)人員協(xié)作,跟蹤代碼更改,并管理源代碼庫的版本。Mercurial 提供了一種靈活的工作流程,能夠適應(yīng)不同團(tuán)隊(duì)和項(xiàng)目的需求。
圖片
Mercurial 具有以下特點(diǎn)和優(yōu)勢:
Facebook選擇Mercurial而不是Git的原因主要包括:
圖片
總之,F(xiàn)acebook 選擇 Mercurial 并非僅僅因?yàn)樗菺it性能更好,而更多地是因?yàn)?Mercurial 的維護(hù)者和代碼庫更加愿意與Facebook合作,并且在工程團(tuán)隊(duì)中得到了有效的傳播和溝通。
谷歌公司內(nèi)部主要使用的是自行研發(fā)的版本管理工具 Piper 來管理代碼,而不是Git。谷歌的 90% 以上的代碼都存放在Piper中。對于那些開源的、需要外部協(xié)作的項(xiàng)目,如 Android 項(xiàng)目和 Chrome 項(xiàng)目,谷歌會(huì)選擇使用 Git。
圖片
Piper 與其他版本管理系統(tǒng)不同,它只有一個(gè)代碼倉庫。也就是說,Google 將所有代碼都放在了一個(gè)代碼倉庫,整個(gè)公司使用不同語言編寫的超過10億文件,近百 TB 源代碼都存放在自行開發(fā)的版本管理系統(tǒng) Piper 中,只當(dāng)項(xiàng)目開源且需要外部協(xié)作時(shí),才會(huì)使用業(yè)界流行的 Git。
Piper 整個(gè)倉庫采用樹狀結(jié)構(gòu),每個(gè)團(tuán)隊(duì)有自己的目錄,目錄路徑就是代碼的命名空間。每個(gè)目錄都有負(fù)責(zé)人,負(fù)責(zé)批準(zhǔn)該目錄的文件變動(dòng)。在權(quán)限控制方面,Piper支持文件級(jí)別的權(quán)限控制,大部分代碼對所有用戶可見,但重要的配置文件和機(jī)密的關(guān)鍵業(yè)務(wù)設(shè)有訪問限制。
在工作流方面,開發(fā)者先創(chuàng)建文件的本地拷貝,這叫做“工作區(qū)”。完成開發(fā)后,工作區(qū)的快照會(huì)共享給其他開發(fā)者進(jìn)行代碼評審。只有通過評審的代碼才能合并到中央倉庫。谷歌采用“主干開發(fā)”的方式,代碼一般提交到主干的頭部,避免了合并分支時(shí)的麻煩。所有代碼在合并進(jìn)倉庫之前,都必須進(jìn)行代碼評審,大部分評審對所有人開放,任何谷歌員工都可以對代碼提意見或者提交變動(dòng)。
那為什么 Google 使用 Piper,而不是使用 Git 呢?
說完了 Facebook 和 Google 使用的版本控制系統(tǒng),最后再來簡單了解一下使用率排在第二的版本控制系統(tǒng)——SVN。
SVN,全稱 Subversion,是一個(gè)開放源代碼的版本控制系統(tǒng)。它主要用于管理和跟蹤文件和目錄的變化,允許多個(gè)人在同一個(gè)項(xiàng)目上同時(shí)工作,并且可以追蹤每個(gè)人的修改,以便在需要時(shí)進(jìn)行版本回退或合并。
SVN的工作原理是將項(xiàng)目文件和版本歷史存儲(chǔ)在中央資料檔案庫中,這個(gè)檔案庫可以記錄每一次文件的變動(dòng),因此用戶可以把檔案恢復(fù)到舊的版本或?yàn)g覽文件的變動(dòng)歷史。SVN通過高效的分支管理系統(tǒng)實(shí)現(xiàn)多個(gè)人共同開發(fā)同一個(gè)項(xiàng)目,實(shí)現(xiàn)共享資源,并最終實(shí)現(xiàn)集中式的管理。
Git 的使用率比 SVN 多的原因主要有以下幾點(diǎn):
通常情況下,SVN 在以下情況下更適用:
Facebook選擇Mercurial的原因主要是出于性能考量和合作與支持的考慮。隨著代碼規(guī)模的急劇增長,F(xiàn)acebook發(fā)現(xiàn)Git在大型單庫操作上的性能存在限制。與此同時(shí),Mercurial的維護(hù)者和社區(qū)更愿意與Facebook合作,提供了良好的支持和溝通渠道。這使得Facebook工程師們得到了必要的支持,并順利完成了從Git到Mercurial的遷移。
而Google選擇自行研發(fā)的Piper系統(tǒng)則是基于其特殊的代碼庫規(guī)模和安全性需求。Google的代碼庫規(guī)模龐大,包含數(shù)億個(gè)文件和大量提交記錄,這要求版本管理系統(tǒng)具備處理大規(guī)模代碼庫的能力。此外,Google還非常注重源代碼的安全性,因此Piper系統(tǒng)在設(shè)計(jì)時(shí)考慮了安全功能,如文件級(jí)別的訪問控制和日志記錄等。
本文鏈接:http://www.tebozhan.com/showinfo-26-83637-0.html2024 年了,F(xiàn)acebook、Google 竟然都不用 Git 管理代碼?
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com