Meta開(kāi)源自家的源碼控制系統(tǒng)Sapling客戶端,Sapling是與Git兼容源碼控制系統(tǒng),Meta強(qiáng)調(diào),Sapling具備高可用性,可以支持全球最大的單體存儲(chǔ)庫(kù)。Meta目前僅先開(kāi)源Sapling客戶端,但預(yù)計(jì)接下來(lái)還會(huì)開(kāi)源和Sapling兼容的虛擬文件系統(tǒng),以及Sapling服務(wù)器。
源碼控制已經(jīng)成為現(xiàn)代開(kāi)發(fā)人員最重要的工具,Git、GitHub和GitLab等工具已然成為整個(gè)軟件產(chǎn)業(yè)的基礎(chǔ),而在Meta中,源碼控制負(fù)責(zé)存儲(chǔ)開(kāi)發(fā)人員開(kāi)發(fā)中的程序代碼、歷史記錄,并提供程序代碼服務(wù),Meta提到,源碼控制工具是他們快速開(kāi)發(fā)產(chǎn)品的關(guān)鍵,因此投入許多資源進(jìn)行改善。
在過(guò)去10年,Meta一直開(kāi)發(fā)并發(fā)展自家的源碼控制工具Sapling,現(xiàn)在Meta開(kāi)源其客戶端,使得任何開(kāi)發(fā)者,都可以使用Sapling內(nèi)置的Git支持來(lái)操作存儲(chǔ)庫(kù)。Sapling是Meta著重可用性和可擴(kuò)展性的源碼控制系統(tǒng),許多操作概念與Git和Mercurial相似。
當(dāng)Sapling客戶端、服務(wù)器和虛擬文件系統(tǒng)共同運(yùn)行時(shí),Sapling可以服務(wù)數(shù)千萬(wàn)文件,并且負(fù)荷數(shù)千萬(wàn)次提交以及分支,在Meta主要是將Sapling用于處理大型單體存儲(chǔ)庫(kù)(Monorepo),但Sapling也支持復(fù)制,并且與其他Git存儲(chǔ)庫(kù)互動(dòng),也可供個(gè)人開(kāi)發(fā)使用,與GitHub和GitLab等Git托管服務(wù)一起運(yùn)行。
大型單體存儲(chǔ)庫(kù)正是Meta創(chuàng)建Sapling的原因,Meta表示,在10年前,任何公共源碼控制系統(tǒng),都無(wú)法處理他們的大型單體存儲(chǔ)庫(kù),而他們也不愿意拆分存儲(chǔ)庫(kù),因?yàn)闀?huì)失去單體存儲(chǔ)庫(kù)所帶來(lái)的好處,像是簡(jiǎn)化相依項(xiàng)目管理,以及快速進(jìn)行大規(guī)模更新的能力。
原本Sapling是以Mercurial開(kāi)源項(xiàng)目的擴(kuò)展項(xiàng)目啟動(dòng),但后來(lái)迅速發(fā)展出具有新存儲(chǔ)格式、協(xié)議、算法和行為的獨(dú)立系統(tǒng)。而在提高規(guī)模的同時(shí),Meta還想要改善源碼控制的實(shí)際體驗(yàn),Meta提到,當(dāng)前版本控制系統(tǒng)的可用性仍然不足,開(kāi)發(fā)人員需要維護(hù)存儲(chǔ)庫(kù)復(fù)雜性,常需要以復(fù)雜的命令解決簡(jiǎn)單的問(wèn)題。
Sapling則可以改善這些狀況,其操作起來(lái)和Git的基本命令類(lèi)似,用戶可以復(fù)制存儲(chǔ)庫(kù)、提交、修改并推送程序代碼至服務(wù)器,但是每一個(gè)命令都以簡(jiǎn)單易用為設(shè)計(jì)目標(biāo),每個(gè)命令只執(zhí)行一件事,本地分支名稱可選,且沒(méi)有暫存區(qū)。