Sapling, um sistema de controle de código-fonte compatível com Git

muda

O Sapling enfatiza a facilidade de uso enquanto escala para os maiores repositórios do mundo.

Facebook revelado por meio de uma postagem no blog, o sistema de gerenciamento de código-fonte moço utilizados no desenvolvimento de projetos internos da empresa. O sistema visa fornecer uma interface de controle de versão familiar que pode escalar para repositórios muito grandes abrangendo dezenas de milhões de arquivos, confirmações e ramificações.

A ideia principal do sistema é que, ao interagir com uma parte especial do servidor que fornece armazenamento de repositório, escala de todas as operações com base no número de arquivos realmente usados ​​no código no qual o desenvolvedor está trabalhando e não dependem do tamanho total de todo o repositório.

Por exemplo, um desenvolvedor pode usar apenas uma pequena parte do código de um repositório muito grande, e apenas essa pequena parte, e não o repositório inteiro, será transferida para seu sistema. O diretório de trabalho é preenchido dinamicamente, à medida que os arquivos do repositório são acessados, o que, por um lado, permite acelerar significativamente o trabalho com sua parte do código, mas, por outro lado, diminui a velocidade ao acessá-lo para pela primeira vez a novos arquivos e requer acesso constante à rede (fornecido separadamente e no modo de preparação de confirmação offline).

Além do carregamento de dados adaptativo, Sapling também implementa otimizações que visam reduzir a carga de informações com histórico de alterações. (por exemplo, 3/4 dos dados em um repositório com o kernel do Linux é o histórico de alterações).

Para trabalhar efetivamente com o histórico de alterações, os dados associados a ele são armazenados em uma visão segmentada, que permite baixar partes separadas do gráfico de confirmação do servidor. O cliente pode solicitar ao servidor informações sobre a relação de várias confirmações e baixar apenas a parte necessária do gráfico.

O projeto está em desenvolvimento há 10 anos e foi criado para resolver problemas ao acessar repositórios monolíticos muito grandes com um branch master, onde era praticada a prática de usar a operação "rebase" em vez de "merge".

Naquela época, não havia soluções abertas para trabalhar com esses repositórios, e os engenheiros do Facebook decidiram criar um novo sistema de controle de versão que atendesse às necessidades da empresa, em vez de dividir os projetos em pequenos repositórios, o que levaria a um gerenciamento de dependências mais complicado ( ao mesmo tempo, para resolver um problema semelhante, a Microsoft criou a camada GVFS).

Inicialmente, o Facebook usava o sistema Mercurial e o projeto Sapling foi desenvolvido inicialmente como uma adição ao Mercurial. Com o tempo, o sistema tornou-se um projeto independente com seu próprio protocolo, formato de armazenamento e algoritmos, que também foi estendido com a capacidade de interagir com repositórios Git.

Para o trabalho, o utilitário de linha de comando "sl" é proposto, que implementa conceitos típicos, fluxos de trabalho e uma interface familiar para desenvolvedores familiarizados com Git e Mercurial. A terminologia e os comandos no Sapling são ligeiramente diferentes do Git e mais próximos do Mercurial.

Entre os recursos adicionais de Sapling, destaca o suporte para “registro inteligente” (smartlog), que permite avaliar visualmente o status do seu repositório, destaque as informações mais importantes e filtre os detalhes menores. Por exemplo, quando você executa o utilitário sl sem argumentos, apenas suas próprias alterações locais são exibidas (as estrangeiras são recolhidas), o status de branches externos, arquivos alterados e novas versões de commits são exibidos. Além disso, uma interface da web interativa é fornecida para navegação rápida pelo smart log, change tree e commits.

Outra melhoria notável no Sapling é que torna muito mais fácil o processo de correção e análise de erros e reversão para um estado anterior. Por exemplo, os comandos "sl undo", "sl redo", "sl uncommit" e "sl unmend" são sugeridos para reverter muitas operações, "sl hide" e "sl unhide" para ocultar temporariamente commits e para navegação interativa. estados Sapling também oferece suporte ao conceito de uma pilha de confirmação, que permite que você organize uma revisão passo a passo, dividindo a funcionalidade complexa em um conjunto de alterações incrementais menor e mais compreensível (de uma estrutura básica a um recurso final). .

Separadamente, uma parte do servidor foi desenvolvida para trabalho remoto eficaz com repositórios e um sistema de arquivos virtual para trabalhar com uma parte local de uma parte do repositório como se fosse um repositório completo (o desenvolvedor vê o repositório inteiro, mas apenas os dados solicitados são copiados para o sistema local, que é acessado).

O código desses componentes usados ​​na infraestrutura do Facebook ainda não está aberto, mas a empresa prometeu lançá-lo no futuro. No entanto, os protótipos do servidor Mononoke (em Rust) e VFS EdenFS (em C++) já podem ser encontrados no repositório Sapling. Esses componentes são opcionais e o cliente Sapling é suficiente para trabalhar, que suporta a clonagem de repositórios Git, interagindo com servidores baseados em Git LFS e trabalhando com hosts git como o GitHub.

Vários plugins foram preparados para Sapling, incluindo a interface ReviewStack para revisão de alterações (código sob GPLv2), que permite processar solicitações pull no GitHub e usar uma exibição de pilha de alterações.

Se você estiver interessado em saber mais sobre isso, você pode consultar os detalhes no link a seguir.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.