Pergunta

Eu li o livro de subversão e fica claro para mim que a subversão não armazena arquivos individuais, mas apenas deltas para minimizar o espaço do disco. A subversão também faz o mesmo com arquivos binários (isso costumava ser uma enorme fraqueza de CVs).

No entanto, não entendo o mecanismo exato. Quando eu comprometo um arquivo, o que acontece?

  1. Subversão armazena apenas o diff (e já tem a versão antiga)
  2. O Subversão exclui a versão anterior, armazena o novo arquivo intacto e cria um diferencial reverso para "recriar" a versão antiga, se necessário.
  3. Outra coisa que eu não pensei.

O primeiro caso pode parecer o mais lógico. Isso, no entanto, levanta outra questão. Se eu tiver em um repositório de subversão, um arquivo com 1000 compromissos e um novo desenvolvedor verifica uma cópia limpa, o Subversão teria que buscar a versão original (importação inicial) e aplicar 1000 diffs sobre isso antes de retornar o resultado. Isso está correto? Existe algum tipo de cache para arquivos em que a versão mais recente também é mantida?

Basicamente, onde posso encontrar informações sobre o repositório SVN Internais?

Atualizar: Aparentemente, o back -end da subversão desempenha um grande papel nisso. Na época ou a gravação do FSFS, usa a opção 1 enquanto o BDB usa a opção 2. Obrigado Msemack!

Foi útil?

Solução

Como o formato repositório da Subversão é totalmente interno, eles são livres para alterar a representação de uma revisão para a seguinte. Acredito que a revisão atual geralmente armazena deltas reversos (sua opção 2), mas também armazena instantâneos completos periodicamente, para que ele não precise resolver 1000 diffs antes de retornar um resultado.

O Subversão 1.6 Release Notes tem uma seção sobre Melhorias de armazenamento do sistema de arquivos Isso tem algumas notas sobre isso e links para outras fontes. Basta dizer que os detalhes do armazenamento de dados de subversão são complexos e sujeitos a alterações.

Há também um documento de design na árvore de origem de subversão que descreve o uso de Skip Deltas em Subversão. Geralmente, o /notas/ O Diretório contém vários documentos úteis sobre os internos de subversão.

Outras dicas

Eu acredito que o link a seguir seria útil para entender a arquitetura FSFS

http://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_fs_fs/structure

De Design de subversão Documento (que é bastante datado), você pode conseguir isso:

Como muitos outros sistemas de controle de revisão, a subversão armazena muda como diferenças. Não faz cópias completas de nós; Em vez disso, ele armazena a revisão mais recente como um texto completo e as revisões anteriores como uma sucessão de diferenças reversas (a palavra "diff" é usada livremente aqui - para arquivos, significa vdeltas, para diretórios, significa um formato que expressa mudanças para diretórios).

Eu não acho que isso mudou desde então.

Veja também Método de bolhas.

o regular Fsfs A especificação pode ajudá -lo.

Ou se você usar Berkeley DB, Aqui está a especificação para isso.

O FSFS usa deltas reversos para armazenar as alterações e SKIP-DELTAS Para acelerar algumas ações, se eu entendesse tudo corretamente.

Cada vez que você comete uma alteração, o repositório armazena uma nova revisão dessa árvore geral do repositório e rotula a nova árvore com um novo número de revisão. Obviamente, a maior parte da árvore é a mesma que a revisão antes, exceto pelas peças que você mudou.

O novo número de revisão é um rótulo seqüencial que se aplica a toda a nova árvore, não apenas aos arquivos e diretórios que você tocou nessa revisão. No entanto, coloquialmente, um número de revisão é usado para se referir à mudança comprometida nessa revisão; Por exemplo, "A mudança em R588" ("R588" é abreviada para "Revisão 588") realmente significa "a diferença entre as árvores de repositório 587 e 588", ou colocar de outra maneira ", a mudança feita na árvore 587 para produzir árvore 588 ".

Dê uma olhada em : FAQ SUBVERSÃO

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top