quarta-feira, 14 de maio de 2008

Utilidades do Subversion SVN

subversion O Subversion, também conhecido simplesmente como SVN, é um recurso que se tornou indispensável no meu trabalho de consultoria e desenvolvimento, assim como na verdade é para qualquer profissional desta área.

O Subversion foi a proposta da Tigris em substituição ao CVS, implementando muitas diferenças que estão bem documentadas com o produto.

Aos que iniciam ou procuram mais informações a respeito, resolvi colocar aqui um pequeno texto relatando a utilidade prática de uso do Subversion:

Introdução:

Numa apresentação mais breve e superficial possível, o Subversion é um sistema de gerenciamento e controle de versão de artefatos dispostos em um repositório. Este repositório compreende uma estrutura gerenciada pelo sistema servidor da solução. Através de ferramentas clientes, o usuário irá interagir com essa estrutura.

O sistema servidor permite designar usuários, para fins de identificar o autor de modificações no repositório e atribuir aos mesmos níveis de acesso.

O workflow de uso do SVN geralmente é o seguinte:

  1. O repositório é criado
  2. Os usuários e seus devidos níveis de acesso são determinados
  3. Algum conteúdo inicial é colocado no repositório para ser gerenciado (initial commit)
  4. Os usuários fazem uma cópia local dos arquivos para fins de consumo ou colaboração no desenvolvimento (checkout)
  5. Os usuário com permissão para modificar o conteúdo efetivam suas alterações locais no repositório (commit). Esse passo pode envolver ainda diversas outras situações como verificar conflito entre o codigo enviado neste momento e alguma modificação realizada no repositório feita por outro usuário, entre o "checkout" e essa tentativa de "commit" das alterações locais.
  6. Os demais usuários verificam modificações no repositório (synchronization) e atualizam suas versões locais (update). Se o usuário modificou algum arquivo, as situações de conflito entre modificações do conteúdo no repositório e conteúdo local do passo anterior podem ocorrer e o usuário terá como resolver as mesmas com instrumentos simples.

Estabelecido o servidor, suas utilidades podem ser apresentadas em basicamente 2 perfis, conforme relato adiante.

Para o desenvolvedor de conteúdo:

É um sistema que permite controlar a versão dos artefatos que fazem parte do repositório (geralmente códigos-fonte). Ao mesmo tempo, permite, de maneira imperativa (forçada) ou passiva (facultativa) documentar as modificações em cada artefato. Essa documentação se dá no momento de enviar para o repositório (commit) um artefato que foi alterado.

Para o consumidor

Ter uma maneira "atômica" de atualizar e acompanhar as modificações no mesmo. "Atômico" refere-se ao fato de que o sistema é capaz de atualizar somente a parte alterada de um arquivo modificado na fonte. Por exemplo, imagine um arquivo de 8MB no repositório. No primeiro momento (checkout) vc baixa os 8MB para estar em sincronismo com o repositório. Nas atualizações / modificações (updates), você vai baixar somente os "bytes" que diferem a sua versão local do arquivo. Se você for uma das pessoas autorizadas a modificar a fonte (repositório) o mesmo acontece na hora de "enviar" as modificações (commits). Você não precisará fazer o upload de 8MB e sim, apenas dos "bytes" que alteraram a versão no repositório.

Links:

  • TortoiseSVN
    Client para interagir com um servidor/repositório SVN, que integra-se ao sistema operacional.
  • VisualSVN
    Ferramenta de administração (criação de repositorios/controle de usuários).
  • Subclipse
    Plugin de integração com Eclipse IDE. Como o FlexBuilder da Adobe baseia-se no Eclipse, o plugin também é funcional nele.

3 comentários:

Anônimo disse...

Otimo post Vicente, tem muita informacao boa aqui para quem ta comecando com SVN, e acho q aborda todas as perguntas iniciais.

Vicente Maciel Junior disse...

Super thanks Marcos! Era essa mesmo a intenção! Valeu o comment!

Felipe Fernandes disse...

Apesar de já usar o SVN, e inclusive ajudar a implantar no meu trabalho, eu ainda tenho duvida quando se trata de /trunks e /branches e qdo eu devo usá-los. Apesar de ter lido coisas bem interessantes a respeito.