Sapling, un sistema di controllo del codice sorgente compatibile con Git

alberello

Sapling enfatizza la facilità d'uso mentre si adatta ai repository più grandi del mondo.

Facebook svelato attraverso un post sul blog il sistema di gestione del codice sorgente Alberello utilizzato nello sviluppo di progetti interni dell'azienda. Il sistema mira a fornire un'interfaccia di controllo della versione familiare che può scalare a repository molto grandi che coprono decine di milioni di file, commit e rami.

L'idea principale del sistema è che interagendo con una parte speciale del server che fornisce l'archiviazione del repository, tutte le operazioni scalano in base al numero di file effettivamente utilizzati nel codice su cui sta lavorando lo sviluppatore e non dipendono dalla dimensione totale dell'intero repository.

Ad esempio, uno sviluppatore può utilizzare solo una piccola porzione di codice da un repository molto grande e solo questa piccola porzione, e non l'intero repository, verrà trasferita al proprio sistema. La directory di lavoro viene riempita dinamicamente, man mano che si accede ai file del repository, il che, da un lato, consente di velocizzare notevolmente il lavoro con la propria parte di codice, ma dall'altro lo rallenta quando si accede per la prima volta a nuovi file e richiede un accesso costante alla rete (fornito separatamente e modalità di preparazione del commit offline).

Oltre al caricamento adattivo dei dati, Sapling implementa anche ottimizzazioni volte a ridurre il carico di informazioni con una cronologia delle modifiche. (ad esempio, 3/4 dei dati in un repository con il kernel Linux è la cronologia delle modifiche).

Per lavorare efficacemente con la cronologia delle modifiche, i dati ad essa associati vengono archiviati in una vista segmentata, che consente di scaricare parti separate del grafico di commit dal server. Il client può chiedere al server informazioni sulla relazione di più conferme e scaricare solo la parte necessaria del grafico.

Il progetto è stato sviluppato negli ultimi 10 anni ed è stato creato per risolvere problemi durante l'accesso a repository monolitici molto grandi con un ramo master, dove veniva praticata la pratica di utilizzare l'operazione "rebase" invece di "merge".

A quel tempo, non esistevano soluzioni aperte per lavorare con tali repository e gli ingegneri di Facebook decisero di creare un nuovo sistema di controllo della versione che soddisfacesse le esigenze dell'azienda, piuttosto che suddividere i progetti in piccoli repository, il che porterebbe a una gestione delle dipendenze più complicata ( un tempo, per risolvere un problema simile, Microsoft ha creato il livello GVFS).

Inizialmente, Facebook utilizzava il sistema Mercurial e il progetto Sapling è stato inizialmente sviluppato come aggiunta a Mercurial. Nel tempo, il sistema è diventato un progetto indipendente con il proprio protocollo, formato di archiviazione e algoritmi, che è stato anche esteso con la possibilità di interagire con i repository Git.

Per lavoro, viene proposta l'utilità della riga di comando "sl", che implementa concetti tipici, flussi di lavoro e un'interfaccia familiare agli sviluppatori che hanno familiarità con Git e Mercurial. La terminologia e i comandi in Sapling sono leggermente diversi da Git e più vicini a Mercurial.

Tra le funzionalità aggiuntive di Alberello, mette in evidenza il supporto per la "registrazione intelligente" (smartlog), che ti consente di valutare visivamente lo stato del tuo repository, evidenziare le informazioni più importanti e filtrare i dettagli minori. Ad esempio, quando si esegue l'utility sl senza argomenti, vengono visualizzate solo le proprie modifiche locali (quelle esterne vengono compresse), vengono visualizzati lo stato dei rami esterni, i file modificati e le nuove versioni dei commit. Inoltre, viene fornita un'interfaccia Web interattiva per una rapida navigazione attraverso lo smart log, l'albero delle modifiche e i commit.

Un altro notevole miglioramento in Sapling è quello rende molto più semplice il processo di correzione e analisi degli errori e il ripristino di uno stato precedente. Ad esempio, i comandi "sl undo", "sl redo", "sl uncommit" e "sl unmend" sono suggeriti per invertire molte operazioni, "sl hide" e "sl unhide" per nascondere temporaneamente i commit e per la navigazione interattiva. afferma Sapling supporta anche il concetto di commit stack, che consente di organizzare una revisione passo dopo passo suddividendo funzionalità complesse in un insieme di modifiche incrementali più piccolo e più comprensibile (da un framework di base a una funzionalità finale). .

Separatamente, è stata sviluppata una parte server per un efficace lavoro remoto con i repository e un file system virtuale per lavorare con una porzione locale di una parte del repository come se fosse un repository completo (lo sviluppatore vede l'intero repository, ma solo i dati richiesti vengono copiati nel sistema locale, a cui si accede).

Il codice per questi componenti utilizzati nell'infrastruttura di Facebook non è ancora disponibile, ma la società ha promesso di rilasciarlo in futuro. Tuttavia, i prototipi del server Mononoke (in Rust) e VFS EdenFS (in C++) sono già disponibili nel repository Sapling. Questi componenti sono opzionali e il client Sapling è sufficiente con cui lavorare, che supporta la clonazione dei repository Git, l'interazione con i server basati su Git LFS e il lavoro con host git come GitHub.

Diversi plugin sono stati preparati per Sapling, inclusa l'interfaccia ReviewStack per la revisione delle modifiche (codice sotto GPLv2), che consente di elaborare le richieste pull su GitHub e utilizzare una visualizzazione dello stack delle modifiche.

Se sei interessato a saperne di più, puoi consultare i dettagli nel seguente link


Puoi essere il primo a lasciare un commento

Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.