Sapling, ett Git-kompatibelt kontrollsystem för källkod

ungt träd

Sapling betonar användarvänlighet samtidigt som den skalas till världens största förråd.

Facebook presenteras genom ett blogginlägg källkodshanteringssystemet Ungt träd används i utvecklingen av företagets interna projekt. Systemet syftar till att tillhandahålla ett versionskontrollgränssnitt bekant som kan skalas till mycket stora arkiv som spänner över tiotals miljoner filer, commits och filialer.

Huvudidén med systemet är att genom att interagera med en speciell del av servern som tillhandahåller lagringsutrymme, alla operationer skala baserat på antalet filer faktiskt används i koden som utvecklaren arbetar med, och är inte beroende av den totala storleken på hela förvaret.

Till exempel kan en utvecklare bara använda en liten del av koden från ett mycket stort arkiv, och endast denna lilla del, och inte hela arkivet, kommer att överföras till deras system. Arbetskatalogen fylls dynamiskt, eftersom förvarsfilerna nås, vilket å ena sidan gör att du kan påskynda arbetet avsevärt med din del av koden, men å andra sidan saktar ner det när du kommer åt den för första gången till nya filer och kräver konstant nätverksåtkomst (tillhandahålls separat och offline-förberedelseläge).

Förutom adaptiv dataladdning, Sapling implementerar också optimeringar som syftar till att minska informationsbelastningen med en historik av förändringar. (till exempel är 3/4 av datan i ett arkiv med Linux-kärnan ändringshistorik).

För att arbeta effektivt med ändringshistoriken lagras data som är associerade med den i en segmenterad vy, som låter dig ladda ner separata delar av commit-grafen från servern. Klienten kan be servern om information om förhållandet mellan flera bekräftelser och ladda ner endast den nödvändiga delen av grafen.

Projektet har varit under utveckling de senaste 10 åren och skapades för att lösa problem vid åtkomst av mycket stora monolitiska förråd med en mastergren, där övningen att använda "rebase"-operationen istället för "merge" praktiserades.

Vid den tiden fanns det inga öppna lösningar för att arbeta med sådana arkiv, och Facebooks ingenjörer bestämde sig för att skapa ett nytt versionskontrollsystem som skulle möta företagets behov, snarare än att dela upp projekt i små arkiv, vilket skulle leda till mer komplicerad beroendehantering ( på en gång, för att lösa ett liknande problem, skapade Microsoft GVFS-lager).

Till en början använde Facebook Mercurial-systemet och Sapling-projektet utvecklades ursprungligen som ett tillägg till Mercurial. Med tiden blev systemet ett självständigt projekt med sitt eget protokoll, lagringsformat och algoritmer, som också utökades med möjligheten att interagera med Git-repositories.

För jobb, kommandoradsverktyget "sl" föreslås, som implementerar typiska koncept, arbetsflöden och ett gränssnitt som är bekant för utvecklare som är bekanta med Git och Mercurial. Terminologin och kommandona i Sapling skiljer sig något från Git och närmare Mercurial.

Bland de extra funktionerna av Sapling, belyser stöd för "smart registrering" (smartlog), som låter dig visuellt bedöma statusen för ditt förvar, markera den viktigaste informationen och filtrera bort mindre detaljer. Till exempel, när du kör verktyget sl utan argument, visas bara dina egna lokala ändringar (utländska är komprimerade), statusen för externa filialer, ändrade filer och nya versioner av commits visas. Dessutom finns ett interaktivt webbgränssnitt för snabb navigering genom den smarta loggen, ändringsträdet och commits.

En annan anmärkningsvärd förbättring i Sapling är det det gör processen att åtgärda och analysera fel och återgå till ett tidigare tillstånd mycket lättare. Till exempel, kommandona "sl undo", "sl redo", "sl uncommit" och "sl unmend" föreslås för att vända många operationer, "sl hide" och "sl unhide" för att tillfälligt dölja commits och för interaktiv navigering. stater Sapling stöder också konceptet med en commit-stack, som låter dig organisera en granskning steg för steg genom att bryta ner komplex funktionalitet i en mindre, mer begriplig inkrementell uppsättning ändringar (från ett grundläggande ramverk till en sista funktion).

Separat, en serverdel utvecklades för effektivt fjärrarbete med repositories och ett virtuellt filsystem för att arbeta med en lokal del av en del av arkivet som om det vore ett komplett arkiv (utvecklaren ser hela arkivet, men endast den begärda informationen kopieras till det lokala systemet, som nås).

Koden för dessa komponenter som används i Facebooks infrastruktur är inte öppen än, men företaget har lovat att släppa den i framtiden. Mononoke-servern (i Rust) och VFS EdenFS (i C++) prototyper kan dock redan hittas i Sapling-förvaret. Dessa komponenter är valfria och Sapling-klienten är tillräckligt att arbeta med, som stöder kloning av Git-förråd, interaktion med Git LFS-baserade servrar och arbete med git-värdar som GitHub.

Flera plugins har förberetts för Sapling, inklusive ReviewStack-gränssnittet för att granska ändringar (kod under GPLv2), som låter dig behandla pull-förfrågningar på GitHub och använda en ändringsstackvy.

Om du är intresserad av att veta mer om det kan du konsultera detaljerna I följande länk.


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.