Apache Subversion - Parte 2

Neste post, daremos continuidade as características do SVN. Segundo a Apache Software Foundation, o Subversion existe para ser universalmente reconhecido e adotado como um sistema de controle de versão centralizado e de código aberto, caracterizado pela sua confiabilidade como um refúgio seguro para dados valiosos; a simplicidade de seu modelo e uso; e sua capacidade de suportar as necessidades de uma grande variedade de usuários e projetos, desde indivíduos até grandes operações corporativas. O mais recente release foi lançado em 29-11-2016 com a versão 1.9.5. 

Camadas 

Internamente, um sistema Subversion compreende várias bibliotecas dispostas como camadas. Cada um executa uma tarefa específica e permite que os desenvolvedores criem suas próprias ferramentas no nível desejado de complexidade e especificidade.  
  • Fs - O nível mais baixo. Ele implementa o sistema de arquivos versionado que armazena os dados do usuário. 
  • Repos - Responsável pelo repositório construído em torno do sistema de arquivos. Ele tem muitas funções auxiliares e lida com os vários "ganchos" que um repositório pode ter, por exemplo, scripts que são executados quando uma ação é executada. Juntos, Fs e Repos constituem a "interface do sistema de arquivos".  
  • Mod_dav_svn - Fornece acesso WebDAV / Delta-V através do Apache 2.  
  • Ra - Gerencia o "acesso ao repositório", tanto local quanto remoto. Deste ponto em diante, os repositórios são consultados usando URLs, p. 
    • File: /// path / para acesso local, 
    • Http: // host / path / ou https: // host / path / para acesso WebDAV, ou 
    • Svn: // host / caminho / ou svn + ssh: // host / caminho / para o protocolo SVN.  
  • Cliente, Wc - O nível mais alto. Ele abstrai o acesso ao repositório e fornece tarefas comuns do cliente, como autenticar usuários ou comparar versões. Os clientes do Subversion usam a biblioteca Wc para gerenciar a cópia de trabalho local. 

Sistema de arquivos

Pode-se ver o sistema de arquivos do Subversion como "bidimensional". Duas coordenadas são usadas para endereçar inequivocamente itens do sistema de arquivos:
  • Path (caminho normal do sistema de arquivos para sistemas operacionais baseados em Unix); 
  • Revisão. 
Fonte: https://en.wikipedia.org/wiki/Apache_Subversion#/media/File:Svn_3D-tree.svg
Cada revisão em um sistema de arquivos do Subversion tem sua própria raiz, que é usada para acessar o conteúdo nessa revisão. Os arquivos são armazenados como links para a alteração mais recente; Assim, um repositório do Subversion é bastante compacto. O sistema consome espaço de armazenamento proporcional ao número de alterações feitas, não ao número de revisões. 
O sistema de arquivos do Subversion usa transações para manter as alterações atômicas. Uma transação opera em uma revisão especificada do sistema de arquivos, não necessariamente a mais recente. A transação tem sua própria raiz, na qual são feitas alterações. Em seguida, é confirmada e torna-se a última revisão, ou é interrompida. A transação é na verdade um objeto de sistema de arquivos de longa duração. Um cliente não precisa comprometer ou abortar uma transação em si, mas  também pode iniciar uma transação, sair e, em seguida, pode reabrir a transação e continuar usando-a. Potencialmente, vários clientes podem acessar a mesma transação e trabalhar juntos em uma alteração atômica, embora nenhum cliente existente exponha essa capacidade.

Ramificação e marcação

O Subversion usa o modelo de ramificação entre arquivos da Perforce para implementar ramificações e etiquetagem. Um ramo é uma linha separada de desenvolvimento. A marcação refere-se a rotular o repositório em um determinado ponto no tempo para que ele possa ser facilmente encontrado no futuro. No Subversion, a única diferença entre ramos e tags é como eles são usados.
Fonte: https://en.wikipedia.org/wiki/Apache_Subversion#/media/File:Subversion_project_visualization.svg
Um novo ramo ou tag é configurado usando o comando "svn copy", que deve ser usado no lugar do mecanismo do sistema operacional nativo. O diretório copiado é vinculado ao original no repositório para preservar seu histórico, e a cópia leva muito pouco espaço extra no repositório. 
Todas as versões em cada ramo mantêm o histórico do arquivo até o ponto da cópia mais quaisquer alterações feitas desde então. Pode-se "fundir" mudanças de volta para o tronco ou entre ramos.

Limitações e problemas

Um problema conhecido no Subversion afeta a implementação da operação de renomeação de arquivo e diretório. A partir da atualização em 2014, o Subversion implementa a renomeação de arquivos e diretórios como uma "cópia" para o novo nome seguido de uma "exclusão" do nome antigo. Somente os nomes mudam, todos os dados relacionados ao histórico de edição permanecem os mesmos, e o Subversion ainda usará o nome antigo nas revisões mais antigas da "árvore". No entanto, o Subversion pode tornar-se confuso quando uma alteração conflita com edições feitas em outro lugar, tanto para commits regulares, quanto para fusão ramos.

A versão do Subversion 1.5 abordou alguns desses cenários, enquanto outros permaneceram problemáticos. O lançamento do Subversion 1.8 abordou alguns desses problemas ao fazer movimentos de primeira classe no cliente, mas ainda é tratado como copy + delete no repositório.
A partir de 2013 atualização, o Subversion não possui alguns recursos de administração e gerenciamento de repositório. Por exemplo, alguém pode querer editar o repositório para remover permanentemente todos os registros históricos de determinados dados. Subversion não tem suporte embutido para conseguir isto de forma simples.
O Subversion armazena cópias adicionais de dados na máquina local, o que pode se tornar um problema com projetos ou arquivos muito grandes, ou se os desenvolvedores trabalharem em vários ramos simultaneamente. Nas versões anteriores a 1.7, os diretórios .svn no lado do cliente poderiam ficar corrompidos por atividades mal desenvolvidas do usuário, como operações globais de busca/substituição. A partir da versão 1.7, o Subversion usa uma única pasta .svn centralizada por área de trabalho.
O Subversion não armazena os tempos de modificação dos arquivos. Isso pode não ser sempre o que é esperado. Para mitigar isso, existem ferramentas de terceiros que permitem preservar o tempo de modificação e outros meta-dados do sistema de arquivos. No entanto, dar check-out em arquivos de uma data atual, também é importante.
O Subversion usa um modelo de controle de revisão centralizado. Ben Collins-Sussman, um dos criadores do Subversion, acredita que um modelo centralizado ajudaria a evitar que programadores inseguros ocultassem seu trabalho de outros membros da equipe. Alguns usuários de sistemas de controle de versão consideram o modelo centralizado como prejudicial, o famoso, Linus Torvalds atacou o modelo do Subversion e seus desenvolvedores.
O Subversion muitas vezes não lida bem com a normalização de nome de arquivo executada pelo sistema de arquivos HFS +, o que pode causar problemas quando arquivos com caracteres acentuados em seus nomes são adicionados ao repositório.

Desenvolvimento e implementação

A CollabNet continuou seu envolvimento com o Subversion, mas o projeto funciona como uma comunidade de código aberto independente. Em novembro de 2009, o projeto foi aceito na Incubadora Apache, com o objetivo de se tornar parte dos esforços da Apache Software Foundation. Desde março de 2010, o projeto é formalmente conhecido como Apache Subversion, sendo uma parte do Apache Top-Level Projects.

Em outubro de 2009, a WANdisco anunciou a contratação de compromissos básicos do Subversion já que a empresa passou a se tornar um dos principais patrocinadores corporativos do projeto. Isso incluiu Hyrum Wright, presidente da Subversion Corporation e gerente de lançamento do projeto Subversion desde o início de 2008, que se juntou à empresa para liderar sua equipe de código aberto.

A comunidade de código-fonte aberto do Subversion não fornece binários, mas os usuários potenciais podem fazer o download de binários de voluntários. Embora o projeto Subversion não inclua uma interface gráfica oficial do usuário (GUI) para uso com o Subversion, terceiros desenvolveram um  número de diferentes GUIs, juntamente com uma ampla variedade de software adicional auxiliar.

O trabalho anunciado em 2009 incluiu o SubversionJ (uma API Java) e a implementação do comando Obliterate, semelhante ao fornecido pela Perforce. Ambos os aprimoramentos foram patrocinados pela WANdisco.

Os committers do Subversion normalmente têm, pelo menos, um ou dois novos recursos em desenvolvimento ativo ao mesmo tempo. A versão 1.7 do Subversion em outubro de 2011 incluiu um transporte HTTP simplificado para melhorar o desempenho e uma biblioteca de cópia de trabalho reescrita.

Referências


https://en.wikipedia.org/wiki/Apache_Subversion
http://directory.fsf.org/wiki/Subversion
https://subversion.apache.org/

0 comentários: