Facebook introducerede et nyt kildekodestyringssystem Sapling

Facebook (forbudt i Rusland) har offentliggjort Sapling-kildekodestyringssystemet, der bruges i udviklingen af ​​virksomhedens interne projekter. Systemet sigter mod at levere en velkendt versionsgrænseflade, der kan skaleres til meget store arkiver, der spænder over titusinder af filer, commits og filialer. Klientkoden er skrevet i Python og Rust og er åben under GPLv2-licensen.

Separat blev der udviklet en serverdel til effektivt fjernarbejde med arkiver og et virtuelt filsystem til at arbejde med et lokalt udsnit af en del af arkivet som med et fuldt arkiv (udvikleren ser hele arkivet, men kun de anmodede data kopieres til det lokale system, som er tilgået). Koden til disse komponenter, der bruges i Facebook-infrastrukturen, er endnu ikke åben, men virksomheden lovede at offentliggøre den i fremtiden. Prototyper af Mononoke-serveren (i Rust) og VFS EdenFS (i C++) kan dog allerede findes i Sapling-depotet. Disse komponenter er valgfrie, og Sapling-klienten er nok til at fungere, som understøtter kloning af Git-lagre, interaktion med servere baseret på Git LFS og arbejde med git-værter såsom GitHub.

Systemets hovedidé er, at når man interagerer med en speciel serverdel, der sørger for lagring af depotet, skaleres alle operationer afhængigt af antallet af filer, der faktisk bruges i den kode, udvikleren arbejder på, og er ikke afhængige af den samlede størrelse af hele depotet. For eksempel kan en udvikler kun bruge en lille del af koden fra et meget stort lager, og kun denne lille del, snarere end hele lageret, vil blive overført til hans system. Arbejdsmappen udfyldes dynamisk, da filer fra depotet tilgås, hvilket på den ene side giver dig mulighed for at fremskynde arbejdet med din del af koden markant, men på den anden side fører til en opbremsning, når du første gang tilgår nye filer og kræver konstant adgang til netværket (separat leveret og offline-tilstand til forberedelse af commits).

Udover adaptiv dataindlæsning implementerer Sapling også optimeringer, der har til formål at reducere indlæsningen af ​​information med en historik over ændringer (for eksempel er 3/4 af dataene i et lager med Linux-kernen historik for ændringer). For at arbejde effektivt med ændringshistorikken, gemmes de data, der er knyttet til den, i en segmenteret visning, som giver dig mulighed for at downloade separate dele af commit-grafen fra serveren. Klienten kan bede serveren om oplysninger om forholdet mellem flere commits og kun downloade den nødvendige del af grafen.

Projektet er udviklet over de seneste 10 år og blev skabt for at løse problemer ved organisering af adgang til meget store monolitiske repositories med én mastergren, hvor praksis med at bruge "rebase"-operationen i stedet for "merge" blev praktiseret. På det tidspunkt var der ingen åbne løsninger til at arbejde med sådanne arkiver, og Facebooks ingeniører besluttede at skabe et nyt versionskontrolsystem, der opfylder virksomhedens behov, i stedet for at opdele projekter i små arkiver, hvilket ville føre til mere kompliceret afhængighedsstyring (på én gang, for at løse et lignende problem, oprettede Microsoft GVFS-laget). I første omgang brugte Facebook Mercurial-systemet, og Sapling-projektet blev oprindeligt udviklet som en tilføjelse til Mercurial. Med tiden forvandlede systemet sig til et selvstændigt projekt med sin egen protokol, lagringsformat og algoritmer, som også blev udvidet med muligheden for at interagere med Git repositories.

Til arbejde foreslås kommandolinjeværktøjet "sl", som implementerer typiske koncepter, arbejdsgange og en grænseflade, der er kendt for udviklere, der er fortrolige med Git og Mercurial. Terminologien og kommandoerne i Sapling er lidt anderledes end Git og tættere på Mercurial. For eksempel bruges "bogmærker" i stedet for filialer (navngivne filialer understøttes ikke), som standard, når du udfører kloning / pull, indlæses ikke hele depotet, men kun hovedgrenen, der er ingen præ-tagging af commits ( iscenesættelsesområde), i stedet for "git fetch" bruges "sl" kommandoen pull", i stedet for "git pull" - "sl pull --rebase", i stedet for "git checkout COMMIT" - "sl goto COMMIT", i stedet for af "git reflog" - "sl journal", for at tilbageføre ændringen i stedet for "git checkout - FILE" "sl revert FILE" er angivet, og "." bruges til at identificere "HEAD"-grenen. Men generelt er de generelle begreber forgrene og klone/pull/push/commit/rebase-operationer bevaret.

Blandt de ekstra funktioner i Sapling-værktøjssættet skiller understøttelse af en "smart log" (smartlog) sig ud, som giver dig mulighed for visuelt at vurdere tilstanden af ​​dit lager, fremhæve de vigtigste oplysninger og filtrere mindre detaljer fra. For eksempel, når du kører sl-værktøjet uden argumenter, vises kun dine egne lokale ændringer (fremmede er kollapset), status for eksterne filialer, ændrede filer og nye versioner af commits vises. Derudover tilbydes en interaktiv web-interface, som gør det muligt hurtigt at navigere gennem den smarte log, skifte træ og commits.

Facebook introducerede et nyt kildekodestyringssystem Sapling

En anden bemærkelsesværdig forbedring i Sapling er forenklingen af ​​processen med at rette og analysere fejl og vende tilbage til en tidligere tilstand. For eksempel tilbydes kommandoerne "sl fortryd", "sl redo", "sl uncommit" og "sl unamend" til at rulle mange operationer tilbage, "sl hide" og "sl unhide" kommandoer for midlertidigt at skjule commits og interaktiv navigation gennem gamle tilstande og returner til det angivne punkt kommandoen "sl undo -i command". Sapling understøtter også konceptet med en commit stack, som giver dig mulighed for at organisere en trin-for-trin gennemgang ved at nedbryde kompleks funktionalitet i et sæt af mindre og mere forståelige trinvise ændringer (fra en grundlæggende ramme til en færdig funktion).

Der er udarbejdet adskillige tilføjelser til Sapling, herunder ReviewStack-grænsefladen til gennemgang af ændringer (kode under GPLv2), som giver dig mulighed for at behandle pull-anmodninger på GitHub og bruge en stack-visning af ændringer. Derudover er der udgivet tilføjelser til integration med VSCode og TextMate editorer, samt implementering af ISL (Interactive SmartLog) interface og server.

Kilde: opennet.ru

Tilføj en kommentar