Como exatamente o Subversão armazena arquivos no repositório?
-
22-09-2019 - |
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?
- Subversão armazena apenas o diff (e já tem a versão antiga)
- 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.
- 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!
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