Facebook (ipprojbit fil-Federazzjoni Russa) ippubblikat is-sistema ta 'kontroll tas-sors Sapling, użata fl-iżvilupp ta' proġetti interni tal-kumpanija. Is-sistema għandha l-għan li tipprovdi interface ta’ kontroll tal-verżjoni familjari li tista’ tiskala għal repożitorji kbar ħafna li jkopru għexieren ta’ miljuni ta’ fajls, impenji u fergħat. Il-kodiċi tal-klijent huwa miktub f'Python u Rust, u huwa miftuħ taħt il-liċenzja GPLv2.
Ġie żviluppat komponent separat tas-server għal xogħol remot effiċjenti mar-repożitorji, kif ukoll sistema ta' fajls virtwali biex wieħed jaħdem ma' porzjon lokali ta' repożitorju bħallikieku kien repożitorju sħiħ (l-iżviluppatur jara r-repożitorju kollu, iżda d-dejta mitluba biss tiġi kkupjata fis-sistema lokali). Il-kodiċi għal dawn il-komponenti użati fl-infrastruttura ta' Facebook għadu mhux open source, iżda l-kumpanija wiegħdet li tippubblikah fil-futur. Madankollu, prototipi diġà jistgħu jinstabu fir-repożitorju Sapling. server Mononoke (miktub f'Rust) u VFS EdenFS (miktub f'C++). Dawn il-komponenti huma fakultattivi, u l-klijent Sapling, li jappoġġja l-ikklonjar ta' repożitorji Git u l-interazzjoni ma' servers ibbażat fuq Git LFS u jaħdem ma' servizzi ta' hosting git bħal GitHub.
L-idea ewlenija tas-sistema hija li meta jinteraġixxu ma 'parti speċjali tas-server li tipprovdi ħażna tar-repożitorju, l-operazzjonijiet kollha huma skalati skont in-numru ta' fajls li attwalment jintużaw fil-kodiċi li qed jaħdem fuqu l-iżviluppatur, u ma jiddependux fuq id-daqs totali tar-repożitorju kollu. Pereżempju, żviluppatur jista' juża biss porzjon żgħir ta' kodiċi minn repożitorju kbir ħafna u dak il-porzjon żgħir biss se jiġi emigrat lejn is-sistema tiegħu, mhux ir-repożitorju kollu. Id-direttorju tax-xogħol jimtela b'mod dinamiku hekk kif jiġu aċċessati fajls mir-repożitorju, li, min-naħa waħda, jippermettilek tħaffef b'mod sinifikanti x-xogħol mal-parti tiegħek tal-kodiċi, iżda min-naħa l-oħra twassal għal tnaqqis meta taċċessa fajls ġodda għall- l-ewwel darba u teħtieġ aċċess kostanti għan-netwerk (modalità ipprovduta separatament u offline għall-preparazzjoni tal-kommessi).
Minbarra t-tagħbija tad-dejta adattiva, Sapling jimplimenta wkoll ottimizzazzjonijiet immirati biex inaqqsu t-tagħbija tal-informazzjoni bl-istorja tal-bidliet (pereżempju, 3/4 tad-dejta f'repożitorju bil-qalba tal-Linux hija l-istorja tal-bidliet). Biex taħdem b'mod effettiv mal-istorja tal-bidliet, id-dejta assoċjata magħha hija maħżuna f'rappreżentazzjoni segmentata li tippermettilek tniżżel partijiet individwali tal-graff tal-impenn mis-server. Il-klijent jista 'jitlob informazzjoni mis-server dwar ir-relazzjoni bejn diversi kommessi u tniżżel biss il-parti meħtieġa tal-graff.
Il-proġett ilu jiżviluppa matul l-aħħar 10 snin u nħoloq biex isolvi problemi meta jiġi organizzat l-aċċess għal repożitorji monolitiċi kbar ħafna b'fergħa prinċipali waħda, li użat l-operazzjoni "rebase" minflok "għaqda". Dak iż-żmien, ma kien hemm l-ebda soluzzjonijiet miftuħa biex jaħdmu ma 'repożitorji bħal dawn, u l-inġiniera ta' Facebook iddeċidew li joħolqu sistema ġdida ta 'kontroll tal-verżjoni li tissodisfa l-ħtiġijiet tal-kumpanija, minflok ma jaqsmu l-proġetti f'repożitorji żgħar, li twassal għall-kumplessità ta' ġestjoni tad-dipendenza (f'ħin wieħed, biex issolvi problema simili, Microsoft ħolqot saff GVFS). Inizjalment, Facebook uża s-sistema Mercurial u l-proġett Sapling fl-ewwel stadju żviluppat bħala żieda għal Mercurial. Maż-żmien, is-sistema ttrasformat fi proġett indipendenti bil-protokoll, il-format tal-ħażna u l-algoritmi tagħha stess, li ġiet estiża wkoll bil-kapaċità li jinteraġixxu mar-repożitorji Git.
Għax-xogħol, hija offruta utilità tal-linja ta 'kmand "sl", li timplimenta kunċetti tipiċi, flussi tax-xogħol u interface familjari għall-iżviluppaturi familjari ma' Git u Mercurial. It-terminoloġija u l-kmandi f'Sapling huma kemmxejn differenti minn Git u huma eqreb lejn Mercurial. Pereżempju, minflok fergħat, jintużaw "bookmarks" (fergħat imsemmija mhumiex appoġġjati), b'mod awtomatiku, meta tesegwixxi klonu/ġibda, mhux ir-repożitorju kollu jitgħabba, iżda l-fergħa ewlenija biss, m'hemm l-ebda mmarkar preliminari ta 'kommetti ( staging area), minflok "git fetch" il-kmand "sl" jintuża pull", minflok "git pull" - "sl pull -rebase", minflok "git checkout COMMIT" - "sl goto COMMIT", minflok "git reflog" - "sl journal", biex tikkanċella bidla minflok "git checkout - FILE" "sl revert FILE" hija speċifikata, u "jintuża biex tidentifika l-fergħa "HEAD". Iżda b'mod ġenerali, il-kunċetti ġenerali ta 'fergħat u operazzjonijiet ta' klonu/pull/push/commit/rebase huma ppreservati.
Fost il-karatteristiċi addizzjonali tal-għodda Sapling, jispikka l-appoġġ għal "smartlog", li jippermettilek tivvaluta viżwalment l-istat tar-repożitorju tiegħek, tenfasizza l-aktar informazzjoni importanti u tiffiltra dettalji mhux importanti. Pereżempju, meta tħaddem l-utilità sl mingħajr argumenti, jintwerew biss il-bidliet lokali tiegħek stess fuq l-iskrin (oħrajn huma minimizzati), jintwerew l-istat tal-fergħat esterni, fajls mibdula u verżjonijiet ġodda ta 'commits. Barra minn hekk, hija offruta interface tal-web interattiv, li jagħmilha possibbli li tinnaviga malajr permezz tal-ġurnal intelliġenti, tibdel is-siġra u tikkommetti.

Titjib ieħor notevoli f'Spling huwa li jagħmilha aktar faċli biex jiġu ffissati u solvuti żbalji u terġa 'lura għal stat preċedenti. Pereżempju, il-kmandi "sl undo", "sl redo", "sl uncommit" u "sl unamend" huma offruti biex jinqalgħu lura ħafna operazzjonijiet, il-kmandi "sl hide" u "sl unhide" huma użati biex jaħbu temporanjament kommits; u għan-navigazzjoni interattiva fi stati qodma u rritorna lejn il-punt speċifikat bil-kmand "sl undo -i kmand". Sapling jappoġġja wkoll il-kunċett ta 'commit stack, li jippermettilek torganizza reviżjonijiet pass pass billi tkisser il-funzjonalità kumplessa f'sett ta' bidliet inkrementali iżgħar u li jinftiehmu aktar (minn qafas bażiku għal funzjoni lesta).
Ġew ippreparati diversi żidiet għal Sapling, inkluż l-interface ReviewStack għar-reviżjoni tal-bidliet (kodiċi taħt GPLv2), li jippermettilek tipproċessa talbiet tal-ġibda fuq GitHub u tuża viżjoni tal-munzell tal-bidliet. Barra minn hekk, ġew ippubblikati żidiet għall-integrazzjoni mal-edituri VSCode u TextMate, kif ukoll l-implimentazzjoni tal-interface u server ISL (Interactive SmartLog).
Sors: opennet.ru
