Facebook ûntbleatet nij boarnekontrôlesysteem Sapling

Facebook (ferbean yn 'e Russyske Federaasje) publisearre it Sapling-boarnekontrôlesysteem, brûkt yn' e ûntwikkeling fan ynterne bedriuwsprojekten. It systeem is fan doel in fertroude ferzjekontrôle-ynterface te leverjen dy't skaalje kin foar heul grutte repositories dy't tsientallen miljoenen bestannen, commits en tûken spanne. De kliïntkoade is skreaun yn Python en Rust, en is iepen ûnder de GPLv2-lisinsje.

In tsjinnerdiel is apart ûntwikkele foar effisjint wurk op ôfstân mei repositories en in firtueel bestânsysteem foar it wurkjen mei in lokaal diel fan in diel fan 'e repository as in folsleine repository (de ûntwikkelder sjocht it hiele repository, mar allinich de fereaske gegevens dy't tagong krije ta wurdt kopiearre nei it lokale systeem). De koade foar dizze komponinten brûkt yn 'e Facebook-ynfrastruktuer is noch net iepen, mar it bedriuw hat tasein it yn' e takomst te publisearjen. Op it stuit kinne jo lykwols yn it Sapling-repository al prototypen fine fan 'e Mononoke-tsjinner (yn Rust) en VFS EdenFS (yn C ++). Dizze komponinten binne opsjoneel en de Sapling-kliïnt is genôch om te wurkjen, dy't it klonearjen fan Git-repositories stipet, ynteraksje mei servers basearre op Git LFS en wurkje mei git-hostingsites lykas GitHub.

It haadgedachte fan it systeem is dat by ynteraksje mei in spesjaal serverdiel dat opslach leveret fan 'e repository, alle operaasjes wurde skalearre ôfhinklik fan it oantal bestannen dat werklik brûkt wurdt yn' e koade wêr't de ûntwikkelder oan wurket, en binne net ôfhinklik fan de totale grutte fan it hiele repository. Bygelyks, in ûntwikkelder kin mar in lyts diel fan koade brûke fan in heul grut repository en allinich dat lytse diel sil nei syn systeem migrearre wurde, net it heule repository. De wurkmap wurdt dynamysk ynfolle as bestannen fan it repository tagong krije, wêrtroch jo oan 'e iene kant it wurk mei jo diel fan' e koade signifikant kinne fersnelle, mar oan 'e oare kant liedt ta in fertraging by tagong ta nije bestannen foar de earste kear en fereasket konstante tagong ta it netwurk (apart foarsjoen en offline modus foar it tarieden fan commits).

Neist adaptive gegevensladen ymplementearret Sapling ek optimisaasjes dy't rjochte binne op it ferminderjen fan it laden fan ynformaasje mei de skiednis fan feroaringen (bygelyks 3/4 fan 'e gegevens yn in repository mei de Linux-kernel is de skiednis fan feroaringen). Om effektyf te wurkjen mei de feroaringsskiednis, wurde de gegevens dy't dêrmei ferbûn binne opslein yn in segmentearre fertsjintwurdiging wêrmei jo yndividuele dielen fan 'e commit-grafyk kinne downloade fan' e tsjinner. De kliïnt kin ynformaasje fan de tsjinner oanfreegje oer de relaasje tusken ferskate commits en allinich it nedige diel fan 'e grafyk downloade.

It projekt is yn 'e ôfrûne 10 jier ûntwikkele en waard makke om problemen op te lossen by it organisearjen fan tagong ta heul grutte monolityske repositories mei ien mastertûke, dy't de operaasje "rebase" brûkte ynstee fan "fusearje". Op dat stuit wiene d'r gjin iepen oplossingen foar it wurkjen mei sokke repositories, en Facebook-yngenieurs besleaten in nij ferzjekontrôlesysteem te meitsjen dat soe foldwaan oan 'e behoeften fan it bedriuw, ynstee fan projekten te splitsen yn lytse repositories, wat soe liede ta de kompleksiteit fan ôfhinklikensbehear (op ien kear, om in ferlykber probleem op te lossen, makke Microsoft GVFS-laach). Yn it earstoan brûkte Facebook it Mercurial-systeem en it Sapling-projekt yn 'e earste etappe ûntwikkele as oanfolling op Mercurial. Yn 'e rin fan' e tiid feroare it systeem yn in ûnôfhinklik projekt mei in eigen protokol, opslachformaat en algoritmen, dat ek útwreide waard mei de mooglikheid om te ynteraksje mei Git-repositories.

Foar wurk wurdt in kommandorigelprogramma "sl" oanbean, dy't typyske konsepten, workflows en in ynterface ymplementearret dy't bekend binne foar ûntwikkelders dy't bekend binne mei Git en Mercurial. De terminology en kommando's yn Sapling binne wat oars fan Git en binne tichter by Mercurial. Bygelyks, ynstee fan tûken, wurde "blêdwizers" brûkt (neamde tûken wurde net stipe), standert, by it útfieren fan kloon / pull, wurdt net it hiele repository laden, mar allinich de haadtûke, d'r is gjin foarriedige markearring fan commits ( staging gebiet), ynstee fan "git fetch" wurdt it kommando "sl" pull brûkt, ynstee fan "git pull" - "sl pull -rebase", ynstee fan "git checkout COMMIT" - "sl goto COMMIT", ynstee fan "git reflog" - "sl journal", om in feroaring te annulearjen ynstee fan "git checkout - FILE" "sl revert FILE" wurdt oantsjutte, en "." wurdt brûkt om de "HEAD" tûke te identifisearjen. Mar yn 't algemien wurde de algemiene begripen fan tûken en kloon / pull / push / commit / rebase operaasjes bewarre bleaun.

Under de ekstra funksjes fan 'e Sapling toolkit is stipe foar "smartlog", wêrtroch jo de steat fan jo repository visueel kinne beoardielje, de wichtichste ynformaasje markearje en ûnbelangrike details filterje. Bygelyks, as jo it sl-hulpprogramma sûnder arguminten útfiere, wurde allinich jo eigen lokale feroarings op it skerm werjûn (oaren wurde minimalisearre), de steat fan eksterne tûken, feroare triemmen en nije ferzjes fan commits wurde werjûn. Derneist wurdt in ynteraktive webynterface oanbean, dy't it mooglik makket om fluch troch it tûke log te navigearjen, beam te feroarjen en commits.

Facebook ûntbleatet nij boarnekontrôlesysteem Sapling

In oare opmerklike ferbettering yn Sapling is dat it makliker makket om flaters te reparearjen en op te lossen en werom te gean nei in eardere steat. Bygelyks, de kommando's "sl undo", "sl redo", "sl uncommit" en "sl unamend" wurde oanbean om in protte operaasjes werom te rôljen; de kommando's "sl hide" en "sl unhide" wurde brûkt om commits tydlik te ferbergjen; en foar ynteraktive navigaasje troch âlde steaten en werom nei it opjûne punt mei it kommando "sl undo -i kommando". Sapling stipet ek it konsept fan in commit stack, wêrmei jo stap-foar-stap beoardielingen kinne organisearje troch komplekse funksjonaliteit te brekken yn in set fan lytsere, mear begryplike ynkrementele feroarings (fan in basiskader nei in ôfmakke funksje).

Ferskate tafoegings binne taret foar Sapling, ynklusyf de ReviewStack-ynterface foar it beoardieljen fan wizigingen (koade ûnder GPLv2), wêrmei jo pull-oanfragen op GitHub kinne ferwurkje en in stapelwerjefte fan wizigingen brûke. Derneist binne tafoegings publisearre foar yntegraasje mei VSCode- en TextMate-bewurkers, lykas ek de ymplemintaasje fan 'e ISL (Interactive SmartLog) ynterface en server.

Boarne: opennet.ru

Add a comment