Facebook prezantoi një sistem të ri të menaxhimit të kodit burimor Sapling

Facebook (i ndaluar në Federatën Ruse) publikoi sistemin e kontrollit të burimit të fidanëve, i përdorur në zhvillimin e projekteve të brendshme të kompanisë. Sistemi synon të sigurojë një ndërfaqe të njohur të kontrollit të versionit që mund të shkallëzohet për depo shumë të mëdha që përfshijnë dhjetëra miliona skedarë, angazhime dhe degë. Kodi i klientit është shkruar në Python dhe Rust dhe është i hapur nën licencën GPLv2.

Një pjesë e serverit është zhvilluar veçmas për punë efikase në distancë me depo dhe një sistem skedar virtual për të punuar me një pjesë lokale të një pjese të depove si një depo e plotë (zhvilluesi e sheh të gjithë depon, por vetëm të dhënat e kërkuara që aksesohen kopjohet në sistemin lokal). Kodi për këta komponentë të përdorur në infrastrukturën e Facebook nuk është ende i hapur, por kompania ka premtuar se do ta publikojë atë në të ardhmen. Sidoqoftë, aktualisht në depon e Sapling tashmë mund të gjeni prototipe të serverit Mononoke (në Rust) dhe VFS EdenFS (në C++). Këta komponentë janë opsionalë dhe klienti Sapling është i mjaftueshëm për të punuar, i cili mbështet klonimin e depove Git, ndërveprimin me serverët e bazuar në Git LFS dhe punën me faqet e pritjes së git si GitHub.

Ideja kryesore e sistemit është që kur ndërveproni me një pjesë të veçantë të serverit që siguron ruajtjen e depove, të gjitha operacionet shkallëzohen në varësi të numrit të skedarëve të përdorur në të vërtetë në kodin me të cilin po punon zhvilluesi dhe nuk varen nga madhësia totale e të gjithë depove. Për shembull, një zhvillues mund të përdorë vetëm një pjesë të vogël të kodit nga një depo shumë e madhe dhe vetëm ajo pjesë e vogël do të migrohet në sistemin e tij, jo i gjithë depoja. Drejtoria e punës mbushet në mënyrë dinamike ndërsa aksesohen skedarët nga depoja, gjë që, nga njëra anë, ju lejon të përshpejtoni ndjeshëm punën me pjesën tuaj të kodit, por nga ana tjetër çon në një ngadalësim kur aksesoni skedarë të rinj për herën e parë dhe kërkon qasje të vazhdueshme në rrjet (të ofruar veçmas dhe modaliteti offline për përgatitjen e kompetencave).

Përveç ngarkimit të të dhënave adaptive, Sapling zbaton gjithashtu optimizime që synojnë zvogëlimin e ngarkimit të informacionit me historinë e ndryshimeve (për shembull, 3/4 e të dhënave në një depo me kernel Linux është historia e ndryshimeve). Për të punuar në mënyrë efektive me historinë e ndryshimeve, të dhënat e lidhura me të ruhen në një paraqitje të segmentuar që ju lejon të shkarkoni pjesë individuale të grafikut të kryerjes nga serveri. Klienti mund të kërkojë informacion nga serveri në lidhje me marrëdhëniet midis disa kryerjeve dhe të shkarkojë vetëm pjesën e nevojshme të grafikut.

Projekti është zhvilluar gjatë 10 viteve të fundit dhe është krijuar për të zgjidhur problemet gjatë organizimit të aksesit në depo shumë të mëdha monolitike me një degë master, e cila përdorte operacionin "rebase" në vend të "bashkimit". Në atë kohë, nuk kishte zgjidhje të hapura për të punuar me depo të tilla dhe inxhinierët e Facebook vendosën të krijonin një sistem të ri të kontrollit të versionit që do të plotësonte nevojat e kompanisë, në vend që të ndanin projektet në depo të vogla, gjë që do të çonte në kompleksitetin e menaxhimi i varësisë (në një kohë, për të zgjidhur një problem të ngjashëm, Microsoft krijoi shtresën GVFS). Fillimisht, Facebook përdori sistemin Mercurial dhe projektin Sapling në fazën e parë të zhvilluar si një shtesë e Mercurial. Me kalimin e kohës, sistemi u shndërrua në një projekt të pavarur me protokollin e tij, formatin e ruajtjes dhe algoritmet e tij, i cili gjithashtu u zgjerua me aftësinë për të ndërvepruar me depot e Git.

Për punë, ofrohet një mjet i linjës komanduese "sl", i cili zbaton koncepte tipike, flukse pune dhe një ndërfaqe të njohur për zhvilluesit e njohur me Git dhe Mercurial. Terminologjia dhe komandat në Sapling janë paksa të ndryshme nga Git dhe janë më afër Mercurial. Për shembull, në vend të degëve, përdoren "faqeshënuesit" (degët e emërtuara nuk mbështeten), si parazgjedhje, kur ekzekutoni klon/tërheqje, nuk ngarkohet i gjithë depoja, por vetëm dega kryesore, nuk ka asnjë shënim paraprak të kryerjes ( zona e skenës), në vend të "git fetch" përdoret komanda "sl" pull", në vend të "git pull" - "sl pull -rebase", në vend të "git checkout COMMIT" - "sl goto COMMIT", në vend të "git reflog" - "sl journal", për të anuluar një ndryshim në vend të "git checkout - FILE" "sl revert FILE" është specifikuar dhe "." përdoret për të identifikuar degën "HEAD". Por në përgjithësi, konceptet e përgjithshme të degëve dhe operacioneve të klonimit/tërheqjes/shtyrjes/kommit/ribazimit janë ruajtur.

Ndër veçoritë shtesë të paketës së veglave Sapling, spikat mbështetja për "smartlog", i cili ju lejon të vlerësoni vizualisht gjendjen e depove tuaja, të nënvizoni informacionet më të rëndësishme dhe të filtroni detaje të parëndësishme. Për shembull, kur përdorni programin sl pa argumente, në ekran shfaqen vetëm ndryshimet tuaja lokale (të tjerat janë minimizuar), shfaqen gjendja e degëve të jashtme, skedarët e ndryshuar dhe versionet e reja të angazhimeve. Për më tepër, ofrohet një ndërfaqe interaktive në internet, e cila bën të mundur navigimin e shpejtë nëpër regjistrin inteligjent, ndryshimin e pemës dhe angazhimet.

Facebook prezantoi një sistem të ri të menaxhimit të kodit burimor Sapling

Një përmirësim tjetër i dukshëm në Sapling është se e bën më të lehtë rregullimin dhe zgjidhjen e gabimeve dhe rikthimin në gjendjen e mëparshme. Për shembull, komandat "sl undo", "sl redo", "sl uncommit" dhe "sl unamend" ofrohen për të rikthyer shumë operacione; komandat "sl hide" dhe "sl unhide" përdoren për të fshehur përkohësisht kryerjet; dhe për lundrim interaktiv nëpër gjendjet e vjetra dhe kthehuni në pikën e specifikuar me komandën “sl undo -i command”. Sapling mbështet gjithashtu konceptin e një rafte commit, i cili ju lejon të organizoni rishikime hap pas hapi duke ndarë funksionalitetin kompleks në një grup ndryshimesh shtesë më të vogla dhe më të kuptueshme (nga një kornizë bazë në një funksion të përfunduar).

Janë përgatitur disa shtesa për Sapling, duke përfshirë ndërfaqen ReviewStack për rishikimin e ndryshimeve (kodi nën GPLv2), i cili ju lejon të përpunoni kërkesat për tërheqje në GitHub dhe të përdorni një pamje stek të ndryshimeve. Përveç kësaj, janë publikuar shtesa për integrimin me redaktorët VSCode dhe TextMate, si dhe për zbatimin e ndërfaqes dhe serverit ISL (Interactive SmartLog).

Burimi: opennet.ru

Shto një koment