Facebook stellt neues Versionsverwaltungssystem Sapling vor

Facebook (in der Russischen Föderation verboten) veröffentlichte das Quellcodeverwaltungssystem Sapling, das bei der Entwicklung interner Unternehmensprojekte verwendet wird. Ziel des Systems ist es, eine vertraute Versionskontrollschnittstelle bereitzustellen, die fĂŒr sehr große Repositorys mit mehreren zehn Millionen Dateien, Commits und Branches skalierbar ist. Der Client-Code ist in Python und Rust geschrieben und steht unter der GPLv2-Lizenz.

FĂŒr effizientes Remote-Arbeiten mit Repositories wurde eine separate Serverkomponente entwickelt. Zudem steht ein virtuelles Dateisystem zur VerfĂŒgung, mit dem ein lokaler Ausschnitt eines Repositorys wie ein vollstĂ€ndiges Repository bearbeitet werden kann (der Entwickler sieht das gesamte Repository, aber nur die angeforderten Daten werden lokal kopiert). Der Code fĂŒr diese in der Facebook-Infrastruktur verwendeten Komponenten ist noch nicht Open Source, das Unternehmen hat jedoch eine Veröffentlichung fĂŒr die Zukunft angekĂŒndigt. Prototypen sind bereits im Sapling-Repository verfĂŒgbar. Server Mononoke (geschrieben in Rust) und VFS EdenFS (geschrieben in C++) sind optionale Komponenten. Ebenso der Sapling-Client, der das Klonen von Git-Repositories und die Interaktion mit diesen unterstĂŒtzt. Server basiert auf Git LFS und arbeitet mit Git-Hosting-Diensten wie GitHub zusammen.

Die Hauptidee des Systems besteht darin, dass bei der Interaktion mit einem speziellen Serverteil, der die Speicherung des Repositorys bereitstellt, alle VorgĂ€nge in AbhĂ€ngigkeit von der Anzahl der Dateien skaliert werden, die tatsĂ€chlich im Code verwendet werden, an dem der Entwickler arbeitet, und nicht davon abhĂ€ngen die GesamtgrĂ¶ĂŸe des gesamten Repositorys. Beispielsweise verwendet ein Entwickler möglicherweise nur einen kleinen Teil des Codes aus einem sehr großen Repository und nur dieser kleine Teil wird auf sein System migriert, nicht das gesamte Repository. Das Arbeitsverzeichnis wird dynamisch gefĂŒllt, wenn auf Dateien aus dem Repository zugegriffen wird, was Ihnen einerseits eine deutliche Beschleunigung der Arbeit mit Ihrem Teil des Codes ermöglicht, andererseits aber auch zu einer Verlangsamung beim Zugriff auf neue Dateien fĂŒr den fĂŒhrt zum ersten Mal und erfordert stĂ€ndigen Zugriff auf das Netzwerk (separat bereitgestellter und Offline-Modus zur Vorbereitung von Commits).

ZusĂ€tzlich zum adaptiven Laden von Daten implementiert Sapling Optimierungen, die darauf abzielen, das Laden von Informationen mit Änderungshistorie zu reduzieren (beispielsweise 3/4 der Daten im Repository mit dem Kern). Linux (Dies bezieht sich auf den Änderungsverlauf.) Um effizient mit dem Änderungsverlauf arbeiten zu können, werden die zugehörigen Daten segmentiert gespeichert. Dadurch können einzelne Teile des Commit-Graphen vom Server heruntergeladen werden. Der Client kann Informationen ĂŒber die Beziehungen zwischen mehreren Commits vom Server anfordern und nur den benötigten Teil des Graphen herunterladen.

Das Projekt wurde in den letzten 10 Jahren weiterentwickelt und wurde geschaffen, um Probleme bei der Organisation des Zugriffs auf sehr große monolithische Repositorys mit einem Master-Zweig zu lösen, der den „Rebase“-Vorgang anstelle von „Merge“ verwendete. Zu diesem Zeitpunkt gab es keine offenen Lösungen fĂŒr die Arbeit mit solchen Repositories, und Facebook-Ingenieure beschlossen, ein neues Versionskontrollsystem zu entwickeln, das den Anforderungen des Unternehmens gerecht wurde, anstatt Projekte in kleine Repositories aufzuteilen, was zu einer KomplexitĂ€t von fĂŒhren wĂŒrde AbhĂ€ngigkeitsmanagement (um ein Ă€hnliches Problem zu lösen, hat Microsoft einst die GVFS-Schicht erstellt). ZunĂ€chst nutzte Facebook das Mercurial-System und entwickelte in der ersten Phase das Sapling-Projekt als ErgĂ€nzung zu Mercurial. Im Laufe der Zeit wandelte sich das System zu einem eigenstĂ€ndigen Projekt mit eigenem Protokoll, Speicherformat und eigenen Algorithmen, das zudem um die Möglichkeit zur Interaktion mit Git-Repositories erweitert wurde.

FĂŒr die Arbeit wird ein Befehlszeilendienstprogramm „sl“ angeboten, das typische Konzepte, ArbeitsablĂ€ufe und eine Schnittstelle implementiert, die Entwicklern bekannt ist, die mit Git und Mercurial vertraut sind. Die Terminologie und Befehle in Sapling unterscheiden sich geringfĂŒgig von Git und Ă€hneln eher Mercurial. Anstelle von Zweigen werden beispielsweise „Lesezeichen“ verwendet (benannte Zweige werden nicht unterstĂŒtzt). StandardmĂ€ĂŸig wird beim AusfĂŒhren von Klonen/Pull nicht das gesamte Repository geladen, sondern nur der Hauptzweig. Es gibt keine vorlĂ€ufige Markierung von Commits ( Staging-Bereich), statt „git fetch“ wird der „sl“-Befehl verwendet pull“, statt „git pull“ – „sl pull -rebase“, statt „git checkout COMMIT“ – „sl goto COMMIT“, statt „git reflog“ – „sl journal“, um eine Änderung abzubrechen, anstelle von „git checkout – FILE“ wird „sl revert FILE“ angegeben und „.“ wird verwendet, um den „HEAD“-Zweig zu identifizieren. Aber im Allgemeinen bleiben die allgemeinen Konzepte von Verzweigungen und Klon-/Pull-/Push-/Commit-/Rebase-Operationen erhalten.

Unter den zusĂ€tzlichen Funktionen des Sapling-Toolkits sticht die UnterstĂŒtzung von „Smartlog“ hervor, mit der Sie den Zustand Ihres Repositorys visuell beurteilen, die wichtigsten Informationen hervorheben und unwichtige Details herausfiltern können. Wenn Sie beispielsweise das Dienstprogramm sl ohne Argumente ausfĂŒhren, werden nur Ihre eigenen lokalen Änderungen auf dem Bildschirm angezeigt (andere werden minimiert), der Status externer Zweige, geĂ€nderter Dateien und neue Versionen von Commits werden angezeigt. ZusĂ€tzlich wird eine interaktive WeboberflĂ€che angeboten, die eine schnelle Navigation durch das Smart Log, den Änderungsbaum und die Commits ermöglicht.

Facebook stellt neues Versionsverwaltungssystem Sapling vor

Eine weitere bemerkenswerte Verbesserung von Sapling besteht darin, dass es einfacher ist, Fehler zu beheben und zu einem frĂŒheren Zustand zurĂŒckzukehren. Beispielsweise werden die Befehle „sl undo“, „sl redo“, „sl uncommit“ und „sl unamend“ angeboten, um viele VorgĂ€nge rĂŒckgĂ€ngig zu machen; die Befehle „sl hide“ und „sl unhide“ werden verwendet, um Commits vorĂŒbergehend auszublenden; und zur interaktiven Navigation durch alte ZustĂ€nde und RĂŒckkehr zum angegebenen Punkt mit dem Befehl „sl undo -i command“. Sapling unterstĂŒtzt auch das Konzept eines Commit-Stacks, mit dem Sie schrittweise ÜberprĂŒfungen organisieren können, indem Sie komplexe Funktionen in eine Reihe kleinerer, verstĂ€ndlicherer inkrementeller Änderungen aufteilen (von einem GrundgerĂŒst bis zu einer fertigen Funktion).

FĂŒr Sapling wurden mehrere ErgĂ€nzungen vorbereitet, darunter die ReviewStack-Schnittstelle zum ÜberprĂŒfen von Änderungen (Code unter GPLv2), die es Ihnen ermöglicht, Pull-Anfragen auf GitHub zu verarbeiten und eine Stapelansicht der Änderungen zu verwenden. DarĂŒber hinaus wurden ErgĂ€nzungen zur Integration mit VSCode- und TextMate-Editoren sowie zur Implementierung der ISL-Schnittstelle (Interactive SmartLog) und des Servers veröffentlicht.

Source: opennet.ru

Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz und VPS-VDS-Servern đŸ”„ Kaufen Sie zuverlĂ€ssiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster