Controle de versão

De MediaWiki do Campus São José
Revisão de 00h01min de 24 de março de 2011 por Etorresini (discussão | contribs)
Ir para navegação Ir para pesquisar

O controle de versão, também chamado controle de revisão, refere-se ao controle de alterações de documentos, permitindo assim um ambiente para a produção colaborativa de conteúdo. Está presente em várias ferramentas, como por exemplo Microsoft Office (com SharePoint), Google Docs e até esta página do wiki.

Por ser bastante utilizando no desenvolvimento de sistemas, possui significativa documentação disponível. Entretanto, cabe aqui destacar alguns conceitos importantes:

  • Repositório: é o local de armazenamento para onde convergirão as alterações dos documentos. Deve, portanto, possuir um mecanismo para atender operações concorrentes, tratando tais operações ao longo de uma linha temporal. Os documentos em sua versão final são, portanto, o resultado das várias alterações desde a sua criação até o seu estado corrente.
  • Versão (ou revisão): é uma alteração de um ou mais documentos a partir do seu estado (versão/revisão) anterior. Por tratar-se de uma ferramenta colaborativa e, portanto, multiusuário, deve registrar informações como:
    • O quê?: o conteúdo da alteração;
    • Quem?: o autor da alteração;
    • Quando?: data e hora para gerar a linha histórica de alterações.
  • Linha mestre (baseline): linha histórica principal do repositório. Pode haver ramificações, ou variantes da linha principal.
  • Ramificação (branch): conjunto de alterações que divergem da linha mestre. Utilizada geralmente para testes e experimentos. Cabe ressaltar que é possível mesclar ramificações, gerando assim novas versões.
  • Marcação (tag): uma vez a linha mestre e mesmo as ramificações podem se estender por várias versões, é recomendado marcar pontos ao longo da história dos documentos. Tais pontos auxiliam os editores no controle das alterações, e é comum utilizar um padrão numérico para tal.
<graphviz>

digraph RCS { subgraph clusterRepositório { label="Repositório"

0 [shape=Mrecord,label="Documento original"] 1 [shape=Mrecord,label="Versão 1"] 2 [shape=Mrecord,label="Versão 2"] 3 [shape=Mrecord,label="Versão 3"] "..." [shape=plaintext,label="..."] n [shape=Mrecord,label="Versão n"] }


0 -> 1 [label="João, 01/03/2011"] 1 -> 2 [label="Maria, 02/03/2011"] 2 -> 3 [label="Maria, 05/03/2011"] 3 -> "..." [label="João, 10/03/2011"] "..." -> n [label="Maria, 23/03/2011"] }

</graphviz>

Há várias implementações de controle de versão, desde sistemas centralizados como CVS e Subversion até distribuídos como Git, Bazaar e Mercurial. Para este semestre de 2011, foi adotado o Git como ferramenta padrão para os projetos de TCC I. O sistema já está em produção para projetos de pesquisa e trabalhos de conclusão de curso.

Dicionário de operações

O Git possui mais de uma centena de operações para manipular repositórios de arquivos. A seguir, os mais utilizados:

Comando Descrição Exemplo de uso
git init Criação de um novo repositório local. git init
git checkout Atualiza os arquivos para uma determinada versão. Pode ser utilizado para verificar se o diretório de trabalho possui alterações não catalogadas (versionadas). git checkout
git add Adição de novos arquivos para controle de versão. git add monografia.tex
git commit Aplica as últimas alterações no repositório. git commit -a -m "Revisado o primeiro capítulo."
git tag Marca uma versão para facilitar a sua localização. git tag -a v1.0
git log Lista as versões aplicadas no repositório. git log
git revert Pode retroceder na linha histórica de versões, podendo reescrevê-la a partir de um dado ponto. git revert HEAD~4
git branch Cria ramos alternativos à linha mestre. git branch teste
git clone Copia um repositório remoto para outro, local. git clone http://servidor/repo
git pull Sincroniza repositórios (versões) no sentido remoto->local. git pull
git push Sincroniza repositórios (versões) no sentido local-> remoto. git push

Combinação das operações

Um cenário comum é o de múltiplos repositórios. Vamos usar como exemplo o ambiente de projetos de Tele: é criado um repositório remoto vazio para produção colaborativa de conteúdo.

  1. Como o ambiente possui controle de acesso e HTTPS, é preciso informar:
    1. Usuário e senha para autenticação no arquivo ~/.netrc.
    2. Nome completo do usuário, email e permissão de certificado autoassinado no arquivo ~/.gitconfig.
  2. git clone

Referências


Este material foi produzido para a discplina TCC I.