Com essa postagem: Resumos e Artigos sobre Controle de Versão de Códigos vou deixar aqui algumas impressões para estudos futuros. Pegando vários sites como base.
O bom e velho Wikipédia tem o artigo sobre Sistema de controle de versão que dá um apanhado geral sobre o que vem a ser os sistemas de controle de versão e o que eles fazem:
Um sistema de controle de versão (ou versionamento), VCS (do inglês version control system) ou ainda SCM (do inglês source code management) na função prática da Ciência da Computação e da Engenharia de Software, é um software com a finalidade de gerenciar diferentes versões no desenvolvimento de um documento qualquer. Esses sistemas são comumente utilizados no desenvolvimento de software para controlar as diferentes versões — histórico e desenvolvimento — dos códigos-fontes e também da documentação.
Um grande diferencial que tem nesse artigo do wikipédia e que ajuda muito quem esta iniciando no versionamento de códigos é uma lista de “vocabulário comum”, aprenda o termo sempre em inglês!
- Atualização / Update – Atualiza na cópia local as novidades do Servidor, provavelmente as mudanças enviadas por outro desenvolvedor.
- Baixar / Check-out ou checkout – Quando não existe cópia local e é necessário baixar todo o projeto do servidor. Nesse processo é guardado algum tipo de meta-dados (geralmente em pasta oculta) junto dos arquivos baixados.
- Conflito / Conflict – É a alteração simultânea (entre um update e um commit) de um mesmo documento por usuários diferentes.
- Cópia local / Working copy ou working area – É geralmente uma pasta no sistema operacional do desenvolvedor (do lado Cliente) que mantém a cópia da última versão do projeto. É através da cópia local que o Cliente compara com a última versão do Servidor e sabe exatamente o que foi modificado.
- Efetivar ou submeter / Commit, submit ou check-in – Enviar as alterações da cópia local ao Servidor através do Cliente.
- Exportar / Export – Semelhante ao checkout, mas não cria meta-dados junto da informação baixada. Esse processo é utilizado para gerar uma versão “distribuível” e impede (por não conter os meta-dados) que o desenvolvimento seja feito sobre ele.
- Importar / Import – É o processo que envia uma árvore de diretórios ainda não controlada (sem meta-dados) para o repositório pela primeira vez.
Marcação / Tag ou release – É dar um nome a um determinado “momento” do repositório, ou seja, é como uma “fotografia” de determinada data. Alguns sistemas, como o SVN, não diferenciam entre “marcação” e “ramificação”, pois é possível tratar uma ramificação com o conceito ou finalidade de marcação. - Mesclagem / Merge ou integration – Permite que mais de um utilizador modifique um mesmo documento ao mesmo tempo, comparando as diferenças e mesclando mantendo as duas alterações (se possível). A mesclagem geralmente é feita localmente (lado Cliente) na atualização de um documento quando há uma versão no Servidor mais recente que a sua.
- Mesclagem inversa / Reverse integration – É quando um braço é mesclado à linha principal.
- Modificação, diferença ou mudança (Change ou diff.) – Representa a diferença entre uma versão e outra de um mesmo documento.
- Raiz, linha principal ou braço principal / Head, trunk, mainline – é o caminho de revisões que não se quebrou em um braço.
- Ramificação ou braço / Branch – Quando a linha de desenvolvimento precisa ser dividida em duas ou mais.
- Repositório / Repository – local no Sistema onde fica armazenado todas as versões, desde a primeira até a última. Cada sistema geralmente pode ter mais de um repositório.
- Resolução de conflito / Conflict resolve ou Solve – Quando os desenvolvedores precisam analisar o que entrou em conflito e escolher qual alteração fará parte da versão final.
- Revisão ou versão / Revision ou version – Representa um determinado “momento” (uma “fotografia”) de um repositório ou documento.
- Travar / Lock – Em alguns sistemas é possível bloquear um arquivo e ninguém pode alterá-lo nesse momento. Isso é pouco usado e pouco recomendado pois impede o uso simultâneo do mesmo arquivo por mais de um desenvolvedor, mas pode ser bastante útil com arquivos binários e/ou difíceis ou impossíveis de serem mesclados.
- Última versão / last revision – é a última versão enviada ao sistema no braço principal.
- Versão atualizada / Up-to-date – É quando a versão local é idêntica à que está no servidor. Quando alguém submete um documento (que você também está trabalhando) antes de você, o sistema não permite que você envie a sua versão enquanto você não deixar sua versão local atualizada (up-to-date).
- Versão estável / Stable version – Chama-se de “versão estável” uma determinada versão do sistema que está compilando normalmente e não possui nenhuma anomalia grave.
- Versão instável / Unstable version – Chama-se de “versão instável” uma versão do sistema que não está compilando ou que possui alguma anomalia bastante visível e geralmente grave.
Um outro artigo muito bom e bem completo pode ser ser lido em: Conceitos Básicos de Controle de Versão de Software — Centralizado e Distribuído é um artigo mais prático que ajuda o entendimento mostrando desenhos como os processos funcionam.
- Alguém já sobrescreveu o código de outra pessoa por acidente e acabou perdendo as alterações?
- Tem dificuldades em saber quais as alterações efetuadas em um programa, quando foram feitas e quem fez?
- Tem dificuldade em recuperar o código de uma versão anterior que está em produção?
- Tem problemas em manter variações do sistema ao mesmo tempo?
Se alguma das perguntas acima teve um sim como resposta, então sua equipe necessita urgentemente de um sistema para controle de versão!
Torço para que esse artigo sempre continue no ar, ele é excelente para montar aulas sobre o assunto!
Recomendo salvar o artigo em seu Evernote, usando o componente de Captura do navegador Chrome ou Firefox
Pra fechar o assunto tem uma Monografia: Análise Comparativa entre Sistemas de Controle de Versões Daniel Tannure Menandro de Freitas. Tem um excelente conteúdo sobre o assunto. Com destaque para o fluxo entre os diversos tipos de Sistemas de controle de versão, o fluxo do git: