Nos últimos anos, trabalhei com vários sistemas de controle de versão diferentes. Para mim, uma das diferenças fundamentais entre eles é se eles versionam arquivos individualmente (cada arquivo tem sua própria numeração e histórico de versões separados) ou o repositório como um todo (um "commit" ou versão representa um instantâneo de todo o repositório) .
Alguns sistemas de controle de versão "por arquivo":
- CVS
- ClearCase
- Visual SourceSafe
Alguns sistemas de controle de versão "repositório inteiro":
- SVN
- Git
- Mercurial
Na minha experiência, os sistemas de controle de versão por arquivo só levaram a problemas e exigem muito mais configuração e manutenção para serem usados corretamente (por exemplo, "especificações de configuração" no ClearCase). Eu tive muitos casos de um colega de trabalho alterando um arquivo não relacionado e quebrando o que seria idealmente uma linha de desenvolvimento isolada.
Quais são as vantagens desses sistemas de controle de versão por arquivo? Quais problemas os sistemas de controle de versão "repositório inteiro" têm que os sistemas de controle de versão por arquivo não têm?