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?
fonte
Respostas:
Na minha experiência, não há: VCS de "repositório inteiro" domina estritamente o VCS "por arquivo".
fonte
Por arquivo tem uma vantagem quando você cria linhas de produtos (vários produtos de software) a partir do mesmo repositório.
Alguns ambientes de contratação de clientes exigem evidências de que sua queda de código SOMENTE tem as alterações desejadas, e não outras. Isso é bastante fácil se os números de versão do arquivo ainda forem os mesmos.
E este não é um exemplo aleatório que tirei do ar.
Isso aconteceu na última vez em que eu estava enviando atualizações de software ao exército dos EUA para um sistema que eles compraram grande número do meu empregador anterior. O valor em dólar dos contratos era medido em bilhões de dólares fracionários (quando os dólares americanos valiam muito mais)
Por isso, ajuda algumas vezes.
Estranhamente: onde trabalho agora, enviamos a cada cliente um produto diferente também .... (E isso não foi o que eu decidi, caso você esteja se perguntando.)
Suspeito que seja muito mais comum no espaço aeroespacial / de defesa do que em aplicativos da web ou em shrink-wrap.
fonte
git
pode até diferenciar autor e committer, para que você possa manter um repositório 'auditado' onde você saiba quem criou o patch (o autor) e quem o auditou (o committer). Nos forneça uma situação exemplar e eu inverterei meu -1.Não há nenhuma vantagem no controle de versão por arquivo.
As desvantagens, por outro lado, são abundantes e manifestas.
fonte
Eu poderia dizer que os sistemas de controle de versão "por arquivo" não têm outras vantagens claras além da implementação do VCS. Os codificadores do VCS ficariam felizes em codificar quando fosse uma versão "por arquivo". Eu concordo com o ponto que surgiu historicamente.
fonte
Não há vantagem na abordagem por arquivo quando você possui arquivos relacionados. Qual é o caso mais comum nas configurações de desenvolvimento.
Em alguns casos peculiares - / etc ou. os arquivos em seu diretório pessoal no Unix são os únicos que tenho rotineiramente - você está lidando (principalmente) com arquivos não relacionados. E ter um sistema que insiste em manter sincronizadas alterações não relacionadas pode ser um incômodo.
fonte