As principais funções desses sistemas são armazenar metadados sobre as alterações ocorridas no sistema e permitir a recuperação de versões anteriores.
As principais arquiteturas desses sistemas são:
Centralizadas: onde um repositório central é utilizado como fonte única de verdade, e todas as modificações devem ser armazenadas nesse repositório. Ex.: CVS e Subversion
Distribuídos: onde cada repositório local é considerado um repositório completo e qualquer repositório pode, a qualquer momento, ser utilizado como fonte de modificações. Ex.: Mercurial e Git.
Permitem o desenvolvimento de versões simultâneas do mesmo sistema (branching)
Operações comuns:
Annotate/Blame
Verificar quem e quando alterou uma informação pela última vez.
Branch
Uma bifurcação no repositório criando duas linhas paralelas de desenvolvimento. O branch principal é, às vezes, chamado de trunk.
Checkout
Criar uma cópia local a partir de um ponto específico do repositório
Clone
Copiar um repositório contendo todas as suas revisões.
Commit
Conjunto de alterações agrupadas em conjunto e seus meta-dados.
Ato de gravar as alterações efetuadas no repositório.
Conflito
Ocorre quando duas alterações diferentes são realizadas na mesma informação, a partir de um mesmo ponto de origem, e que o sistema não consegue reconciliar.
A resolução do conflito, nesse caso, deve ser feita manualmente, pelo usuário.
Head
O commit mais recente de um branch.
Label/Tag
Uma marcação em um branch em relação a um evento importante (release, sprint, etc).
Merge
Reconciliação de dois conjuntos diferentes de alterações.
Pull / Push
Copiar revisões de um repositório para outro. Pull é iniciada pelo repositório que recebe as alterações, push é iniciada pelo repositório que envia as alterações.
Pull request
Uma requisição para que alterações sejam adicionadas a um branch. Em geral envolve revisão de código e um processo de aprovação.
Informação sobre alterações devem ser realizadas em mensagens de commit:
Qual o motivo dessa alteração?
O que está sendo alterado?
Como a alteração resolve o problema?
Metodologias Ágeis
Surgiram devido à adoção de software em larga escala