Pergunta

Existe um sistema de controle de versão distribuído (git, bazaar, mercurial, darcs etc.) que pode lidar com arquivos maiores que a RAM disponível?

Eu preciso ser capaz de enviar arquivos binários grandes (ou seja,conjuntos de dados, vídeos/imagens de origem, arquivos), mas não preciso diferenciá-los, apenas poder confirmar e atualizar quando o arquivo for alterado.

A última vez que olhei isso foi há cerca de um ano, e nenhum dos candidatos óbvios permitiu isso, já que todos foram projetados para se diferenciarem na memória em termos de velocidade.Isso me deixou com um VCS para gerenciar código e outra coisa (software de "gerenciamento de ativos" ou apenas rsync e scripts) para arquivos grandes, o que é muito feio quando as estruturas de diretório dos dois se sobrepõem.

Foi útil?

Solução

Já se passaram 3 anos desde que fiz esta pergunta, mas, a partir da versão 2.0, o Mercurial inclui o extensão de arquivos grandes, que realiza o que eu estava procurando originalmente:

A extensão largefiles permite rastrear arquivos binários grandes e incompressíveis no Mercurial sem exigir largura de banda excessiva para clones e pulls.Arquivos adicionados como arquivos grandes não são rastreados diretamente pelo Mercurial;em vez disso, suas revisões são identificadas por uma soma de verificação e o Mercurial rastreia essas somas de verificação.Dessa forma, quando você clona um repositório ou extrai conjuntos de alterações, os arquivos grandes em revisões mais antigas do repositório não são necessários e apenas aqueles necessários para atualizar para a versão atual são baixados.Isso economiza espaço em disco e largura de banda.

Outras dicas

Nenhum sistema de controle de versão distribuído gratuitamente suporta isso.Se você quiser esse recurso, terá que implementá-lo.

Você pode descartar o git:eles estão interessados ​​no desempenho bruto para o caso de uso de desenvolvimento do kernel Linux.É improvável que eles aceitem a compensação de desempenho ao escalar para arquivos binários enormes.Não sei sobre o Mercurial, mas eles parecem ter feito escolhas semelhantes às do git ao acoplar seu modelo operacional ao modelo de armazenamento para obter desempenho.

Em princípio, o Bazaar deve ser capaz de oferecer suporte ao seu caso de uso com um plugin que implementa formatos de árvore/ramificação/repositório cujo armazenamento em disco e estratégia de implementação são otimizados para o seu caso de uso.Caso a arquitetura interna bloqueie você e você libere código útil, espero que os principais desenvolvedores ajudem a consertar a arquitetura interna.Além disso, você pode firmar um contrato de desenvolvimento de recursos com a Canonical.

Provavelmente a abordagem mais pragmática, independentemente do DVCS específico, seria construir um sistema híbrido:implemente um armazenamento de arquivos enormes e armazene referências a blobs nesse armazenamento no DVCS de sua escolha.

Transparência completa:Sou ex-funcionário da Canonical e trabalhei em estreita colaboração com os desenvolvedores do Bazaar.

Sim, SCM de plástico.É distribuído e gerencia arquivos enormes em blocos de 4Mb, portanto não fica limitado a ter que carregá-los inteiramente na memória a qualquer momento.Encontre um tutorial sobre DVCS aqui:http://codicesoftware.blogspot.com/2010/03/distributed-development-for-windows.html

BUP pode ser o que você está procurando.Ele foi construído como uma extensão da funcionalidade git para fazer backups, mas é efetivamente a mesma coisa.Ele divide os arquivos em pedaços e usa um hash contínuo para tornar o conteúdo do arquivo endereçável/fazer armazenamento eficiente.

Acho que seria ineficiente armazenar arquivos binários em qualquer forma de sistema de controle de versão.

A melhor ideia seria armazenar arquivos de texto de metadados no repositório que fazem referência aos objetos binários.

Tem que ser distribuído?Supostamente, o grande benefício que o subversion tem para os VCSes distribuídos mais novos é sua capacidade superior de lidar com arquivos binários.

Cheguei à conclusão que a melhor solução neste caso seria utilizar o ZFS.

Sim, o ZFS não é um DVCS, mas:

  • Você pode alocar espaço para repositório criando um novo FS
  • Você pode acompanhar as alterações criando instantâneos
  • Você pode enviar instantâneos (confirmações) para outro conjunto de dados ZFS
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top