Facebook presentou un novo sistema de xestión de código fonte Sapling

Facebook (prohibido na Federación Rusa) publicou o sistema de control de fontes Sapling, usado no desenvolvemento de proxectos internos da empresa. O sistema pretende proporcionar unha interface de control de versións familiar que poida escalar para repositorios moi grandes que abranguen decenas de millóns de ficheiros, commits e ramas. O código do cliente está escrito en Python e Rust e está aberto baixo a licenza GPLv2.

Desenvolveuse unha parte do servidor por separado para un traballo remoto eficiente con repositorios e un sistema de ficheiros virtual para traballar cunha parte local dunha parte do repositorio como un repositorio completo (o desenvolvedor ve todo o repositorio, pero só os datos necesarios aos que se accede cópiase ao sistema local). O código destes compoñentes utilizados na infraestrutura de Facebook aínda non está aberto, pero a compañía comprometeuse a publicalo no futuro. Non obstante, actualmente no repositorio Sapling xa se poden atopar prototipos do servidor Mononoke (en Rust) e VFS EdenFS (en C++). Estes compoñentes son opcionais e o cliente Sapling é suficiente para funcionar, que admite a clonación de repositorios Git, interactuar con servidores baseados en Git LFS e traballar con sitios de hospedaxe de git como GitHub.

A idea principal do sistema é que ao interactuar cunha parte do servidor especial que proporciona almacenamento do repositorio, todas as operacións escalan dependendo do número de ficheiros que realmente se usan no código no que está a traballar o desenvolvedor e non dependen de o tamaño total de todo o repositorio. Por exemplo, un desenvolvedor pode usar só unha pequena parte de código dun repositorio moi grande e só esa pequena parte será migrada ao seu sistema, non a todo o repositorio. O directorio de traballo énchese de forma dinámica a medida que se accede aos ficheiros do repositorio, o que, por unha banda, permítelle acelerar significativamente o traballo coa súa parte do código, pero, por outra banda, provoca unha desaceleración ao acceder a novos ficheiros para o primeira vez e require un acceso constante á rede (se proporciona por separado e o modo fóra de liña para preparar commits).

Ademais da carga adaptativa de datos, Sapling tamén implementa optimizacións dirixidas a reducir a carga de información co historial de cambios (por exemplo, 3/4 dos datos nun repositorio co núcleo de Linux é o historial de cambios). Para traballar eficazmente co historial de cambios, os datos asociados a el gárdanse nunha representación segmentada que lle permite descargar partes individuais do gráfico de confirmación do servidor. O cliente pode solicitar información ao servidor sobre a relación entre varios commits e descargar só a parte necesaria do gráfico.

O proxecto desenvolveuse nos últimos 10 anos e foi creado para resolver problemas ao organizar o acceso a repositorios monolíticos moi grandes cunha rama mestra, que utilizaba a operación "rebase" en lugar de "fusionar". Nese momento, non existían solucións abertas para traballar con este tipo de repositorios, e os enxeñeiros de Facebook decidiron crear un novo sistema de control de versións que satisfaga as necesidades da empresa, en lugar de dividir os proxectos en pequenos repositorios, o que levaría á complexidade de xestión de dependencias (a un tempo, para resolver un problema similar, Microsoft creou a capa GVFS). Inicialmente, Facebook utilizou o sistema Mercurial e o proxecto Sapling na primeira fase desenvolvido como un complemento a Mercurial. Co paso do tempo, o sistema transformouse nun proxecto independente con protocolo, formato de almacenamento e algoritmos propios, que tamén foi ampliado coa posibilidade de interactuar cos repositorios de Git.

Para o traballo, ofrécese unha utilidade de liña de comandos "sl", que implementa conceptos típicos, fluxos de traballo e unha interface familiar para desenvolvedores familiarizados con Git e Mercurial. A terminoloxía e os comandos en Sapling son lixeiramente diferentes de Git e están máis próximos a Mercurial. Por exemplo, en lugar de ramas, utilízanse "marcadores" (as ramas nomeadas non son compatibles), de forma predeterminada, ao executar clon/pull, non se carga todo o repositorio, senón só a rama principal, non hai marcas preliminares de commits ( área de preparación), en lugar de "git fetch" utilízase o comando "sl" pull", en lugar de "git pull" - "sl pull -rebase", en lugar de "git checkout COMMIT" - "sl goto COMMIT", en lugar de "git reflog" - "sl journal", para cancelar un cambio en lugar de "git checkout - FILE" especifícase "sl revert FILE" e úsase "." para identificar a rama "HEAD". Pero en xeral, consérvanse os conceptos xerais de ramas e operacións clon/pull/push/commit/rebase.

Entre as características adicionais do conxunto de ferramentas Sapling, destaca o soporte para "smartlog", que che permite avaliar visualmente o estado do teu repositorio, resaltar a información máis importante e filtrar detalles sen importancia. Por exemplo, cando executas a utilidade sl sen argumentos, só se mostran na pantalla os teus propios cambios locais (outros minimízanse), móstranse o estado das ramas externas, os ficheiros modificados e as novas versións de commits. Ademais, ofrécese unha interface web interactiva, que permite navegar rapidamente polo rexistro intelixente, cambiar a árbore e confirmar.

Facebook presentou un novo sistema de xestión de código fonte Sapling

Outra mellora notable en Sapling é que facilita a corrección e resolución de erros e volver a un estado anterior. Por exemplo, os comandos "sl undo", "sl redo", "sl uncommit" e "sl unamend" ofrécense para retroceder moitas operacións, os comandos "sl hide" e "sl unhide" úsanse para ocultar temporalmente as confirmacións; e para a navegación interactiva por estados antigos e volver ao punto especificado co comando "sl undo -i command". Sapling tamén admite o concepto de pila de compromisos, que lle permite organizar revisións paso a paso dividindo a funcionalidade complexa nun conxunto de cambios incrementais máis pequenos e comprensibles (desde un marco básico ata unha función acabada).

Preparáronse varias adicións para Sapling, incluíndo a interface ReviewStack para revisar os cambios (código baixo GPLv2), que che permite procesar solicitudes de extracción en GitHub e usar unha vista de pila de cambios. Ademais, publicáronse engadidos para a integración cos editores VSCode e TextMate, así como a implementación da interface e do servidor ISL (Interactive SmartLog).

Fonte: opennet.ru

Engadir un comentario