Controle de Versão
Como o próprio nome se define, tem ênfase em gerenciar diferentes versões de um mesmo projeto, onde é permitido visualizar o histórico das modificações, trabalho cooperativo entre programadores e possibilitar comparações entre as versões desenvolvidas com equipe de desenvolvimento.
Apresenta 5 características:
- Registro de Alterações
- Desenvolvimento de Versões Diferentes
- Rastreio de Alterações
- Segurança do Projeto
- Repositório Remoto
Quaisquer sejam as modificações feitas nas entrelinhas dos arquivos do projeto, serão salvas o histórico dessas modificações, ajudando na visualização das mudanças realizadas entre versões e nas futuras correções de software.
Com um sistema que possui ramificações (Branches) de projeto, a equipe pode trabalhar simultaneamente de forma eficaz em fluxos diferentes sem afetar o código-fonte matriz, contando com a verificação de Branches com alterações em conflito e mesclagem de projeto.
Possui a capacidade de rastrear todas as modificações realizadas, conectar com o software de desenvolvimento do projeto e comentários de cada ajuste realizado pelo programador, contudo, facilitando na análise de bugs e no fluxo do projeto.
Somente pessoas autorizadas e identificadas podem manipular o código-fonte, evitando a corrupção dos arquivos.
Todo o projeto será salvo em um repositório remoto, onde em casos de imprevistos pode facilitar na recuperação do projeto.
Como Funciona:
O projeto fica armazenado no servidor(repositório remoto), com todos os históricos e modificações de cada versão. O desenvolvedor pode baixar a última versão e trabalhá-la em sua área de trabalho (Workstation) e posteriormente atualizar a versão contida no servidor.
Os comandos utilizados para efetuarem a sincronização de arquivos do projeto entre a área de trabalho e o servidor são: commit e update.
O comando commit realiza o envio de todos os arquivos alterados na área de trabalho para o servidor com um novo histórico de atualização. O comando update irá baixar a última versão do servidor para a área de trabalho do programador.
Sistemas Centralizados de Controle de Versão
Neste sistema, existe apenas um servidor e várias cópias do projeto nas diversas áreas de trabalho, onde estabelece conexão entre eles. Caso o servidor eventualmente pare de funcionar, não é possível fazer a recuperação do projeto sem algum backup feito momentos antes, sendo um ponto negativo desse tipo de sistema.

Sistemas Distribuídos de Controle de Versão
Neste sistema, os desenvolvedores podem obter a versão mais recente e duplicar localmente o repositório completo. Assim, caso um dos servidores cair, e esses sistemas estiverem conectados por meio dele, qualquer um dos repositórios dos programadores podem ser copiados de volta para o servidor para restaurá-lo. Cada clonagem feita do projeto é backup completo dos dados.

Fonte: