Sistemas de Controle de Versão Livres
Estes são todos os sistemas de controle de versão, livres, dos quais
tinha conhecimento até meados do ano de 2007. O único que uso regularmente
é o Subversion. Exceto pelo Subversion e CVS, tenho pouca ou nenhuma
experiência com a maioria desses sistemas; as informações colocadas aqui
foram retiradas dos seus respectivos sites. Veja também
.
CVS —
O CVS esteve por toda parte, e muitos desenvolvedores se familiarizaram
com ele. Em seu tempo ele foi revolucionário: foi o primeiro sistema de
controle de versão, livre, com acesso em rede de área ampla (www) aos
desenvolvedores (até onde eu sei), e o primeiro a oferecer checkouts
somente-leitura a usuários anônimos, o que possibilitou a novos desenvolvedores
uma maneira fácil de se envolverem nos projetos. O CVS somente controla versões
de arquivos, não de diretórios; ele oferece branching (árvores de versões),
tagging (marcação), e boa performance ao lado cliente, mas não trata muito bem
de arquivos grandes ou de arquivos binários. Ele também não suporta atomics
commits (envios atômicos, literalmente).[Termo de Responsabilidade: Eu
estive ativo no desenvolvimento do CVS por aproximadamente cinco anos, antes de
ajudar a começar o projeto de sua substituição pelo Subversion.]
Subversion —
O Subversion foi escrito em primeiro lugar para ser um substituto para o
CVS—isto é, abordar o controle de versão aproximadamente da mesma forma
que o CVS, mas sem os problemas e omissões de recursos que muito
frequentemente incomodam aos usuários do mesmo. Um dos objetivos do Subversion
é para que pessoas acostumadas ao CVS achem a mudança para ele relativamente
suave. Não há espaço aqui para entrar em detalhes sobre os recursos do
Subversion; consulte seu web site para maiores informações.[Termo de
Responsabilidade: Estou envolvido no desenvolvimento do Subversion, e é o único
desses sistemas que eu uso de forma regular.]
SVK —
Embora seja construído com base no Subversion, o SVK provavelmente
se assemelha a alguns dos sistemas descentralizados abaixo do que ao próprio
Subversion. O SVK suporta desenvolvimento distribuído
(distributed development), envios locais (local commits), change merging (literalmente,
mudança de integração) sofisticado, e a habilidade de espelhar (mirror) árvores
de diretórios originadas de outros sistemas de controle, não-SVK. Consulte seu
web site para maiores informações.
Mercurial —
O Mercurial é um sistema de controle de versão distribuída que oferece,
entre outras coisas, "indexação cruzada completa de arquivos e
conjuntos de alterações (changesets); Protocolos HTTP e de sincronização SSH
eficientes em respeito ao uso de largura de banda (bandwidth) e CPU;
integração (merging) arbitrária entre as árvores de versões de desenvolvedores;
interface web independente integrada; portabilidade para: UNIX, MacOS X, e
Windows" e mais (a lista de recursos anterior foi parafraseada do web site do
Mercurial).
Git —
O Git é um projeto iniciado por Linus Torvalds para administrar a árvore
de código do kernel do Linux. Inicialmente o Git era bastante restrito às
necessidades de desenvolvimento do kernel, mas acabou se expandindo além e hoje
ele é usado para outros tipos de projetos. Seu site diz que ele é
"...desenvolvido para tratar de projetos extremamente grandes com velocidade e
eficiência; ele é usado principalmente por vários projetos de código aberto
(Open Source), mais notavelmente pelo kernel do Linux. O Git se enquadra na
categoria de ferramenta de gerenciamento de código fonte distribuído, semelhante
ao, por exemplo, GNU Arch ou Monotone
(ou ao BitKeeper no mundo proprietário). Todo diretório de trabalho do Git é
completo em si (sem falta de partes), tendo inteira capacidade de revisão por
rastreamento, sem depender de acesso à rede ou a um servidor central."
Bazaar —
O Bazaar (ou bzr) é um sistema de controle de versão distribuída que
se concentra na facilidade de uso e em ter um modelo de dados flexível. Ele é
um projeto GNU oficial, e é o sistema de controle de versão nativo para o
site de hospedagem de projetos de softwares livres, Launchpad.net. O Bazaar
faz um controle de versão distribuída completo: todo trabalho toma lugar em
árvores de versões (branches), e todo desenvolvedor, tipicamente, tem uma cópia
completa do histórico das árvores. Essas árvores podem ser integradas a outras
de uma forma descentralizada, mas o Bazaar pode também ser configurado para
trabalhar de uma forma centralizada. O Bazaar teve início com o código baseado
no GNU Arch, mas foi reescrito a partir do zero e agora não possui relação
direta com ele.
Darcs —
"David's Advanced Revision Control System ainda é um outro substituto
para o CVS. Ele é escrito em Haskell, e tem sido usado no Linux, MacOS X,
FreeBSD, OpenBSD e Microsoft Windows. O Darcs inclui um script cgi, o qual pode
ser usado para se visualizar o conteúdo do seu repositório."
Arch —
O GNU Arch suporta ambos desenvolvimentos distribuído e
centralizado. Os desenvolvedores enviam suas modificações para um "arquivo",
o qual pode ser local, e as mudanças podem ser "empurradas" e "puxadas" para
outros arquivos como os gestores desses arquivos bem entenderem. Como tal
metodologia implica, o Arch tem uma mesclagem mais sofisticada que o
CVS. O Arch também nos permite a facilmente fazer árvores de versões de
arquivos para os que não têm acesso de envio (commit access). Este é apenas um
breve resumo; consulte as páginas da web do Arch para maiores
informações.
monotone —
"O monotone é um sistema de controle de versão livre. Ele
fornece um simples armazenamento de versão transacional de arquivo único, com
completa operação off-line e um protocolo de sincronização ponto-a-ponto
eficiente. Ele compreende integração por histórico; possui árvore de versões
leve, revisão de código integrada e avaliação por terceiros. Ele usa nomeação
de versão por criptografia e certificados RSA de lado cliente
(client-side). Possui bom suporte a internacionalização, não possui dependência
externa, funciona no Linux, Solaris, OSX e Windows, e está licenciado sob
a Licença Pública Geral GNU (GNU GPL)."
Codeville —
"Por que ainda mais um sistema de controle de versão? Todos os outros
sistemas de controle de versão exigem que você mantenha uma varredura cuidadosa
das relações entre os ramos de versões (branches), de modo a não ter que mesclar
várias vezes os mesmos conflitos. O Codeville é muito mais anárquico. Ele
permite você a atualizar ou enviar, de ou para, qualquer repositório a qualquer
hora com nenhuma re-integração desnecessária."
"O Codeville funciona através da criação de um identificador para cada
mudança que é feita, e relembrando a lista de todas as mudanças que tem sido
aplicadas para cada arquivo e a última mudança que modificou cada linha em cada
arquivo. Quando há algum conflito, ele verifica se um dos dois lados
já foi aplicado ao outro; se já foi aplicado, ele faz com que o outro lado
ganhe automaticamente. Quando há um conflito real, não automático, de versões
mescláveis, o Codeville se comporta quase da mesma maneira que o CVS."
Vesta —
"O Vesta é um sistema SCM (Software Configuration Manager -
um gerenciador de configuração de software) portável orientado para apoiar o
desenvolvimento de sistemas de software de quase qualquer tamanho, desde os
relativamente pequenos (abaixo de 10.000 linhas de código) até os muito
grandes (10.000.000 de linhas de código)."
"O Vesta é um sistema maduro. Ele é o resultado de aproximadamente
10 anos de pesquisas e desenvolvimento no Compaq/Digital Systems Research
Center (Centro de Pesquisas de Sistemas Compaq/Digital), e foi usado em produção
pelo Compaq's Alpha microprocessor group
(grupo do microprocessador Alpha do Compaq) por aproximadamente dois anos e
meio. O grupo Alpha teve cerca de 150 desenvolvedores ativos em dois locais que
estavam a milhares de kilômetros de distância um do outro, nas costas leste e
oeste dos Estados Unidos. O grupo usava o Vesta para gerenciar compilações com
tanto quanto 130 MB de fonte de dados, cada qual produzindo 1,5 GB de dados
derivados. As compilações feitas no leste em um dia normal produziram cerca de
10-15 GB de dados derivados, tudo gerenciado pelo Vesta. Embora o Vesta foi
projetado com a idéia de gerenciar desenvolvimentos de software, o grupo Alpha
demonstrou a flexibilidade do sistema usando-o para desenvolvimento de hardware,
registrando seus arquivos de linguagem de descrição de hardware
no código fonte do Vesta para habilidade de controle e construção de simuladores
e outros objetos derivados com o construtor do Vesta. Os membros do primitivo
grupo Alpha, agora uma parte da Intel, continuam usando o Vesta hoje em um novo
projeto de microprocessador."
Aegis —
O Aegis é um sistema de gerenciamento de configuração de software baseado
em transação. Ele fornece um quadro no qual uma equipe de desenvolvedores pode
trabalhar em muitas mudanças para um programa independentemente, e o Aegis
coordena integrando essas mudanças de volta para a fonte principal do programa,
com o mínimo de transtorno possível.
CVSNT —
"O CVSNT é um avançado sistema de controle de versão multiplataforma.
Compatível com o protocolo CVS, padrão da indústria, ele agora suporta muito
mais recursos. ... O CVSNT é um software de código aberto (Open Source) e
livre, sob os termos da Licença Pública Geral GNU (GNU GPL)." Sua lista de
recursos inclui autenticação via todos os protocolos padrões do CVS, mais os
específicos do Windows, SSPI e Active Directory; suporte a transporte seguro,
via sserver ou SSPI encriptado; plataforma cruzada (funciona nos ambientes
Windows ou Unix); a versão NT é totalmente integrada com o sistema Win32; o
processamento MergePoint significa sem mais marcação para mesclar; se encontra
sob desenvolvimento ativo.
META-CVS —
"O Meta-CVS é um sistema de controle de versão construido em torno do CVS.
Embora retenha a maioria dos recursos do CVS, incluindo todo o suporte de rede,
ele é mais competente e mais fácil de usar." Os recursos listados no site do
Meta-CVS incluem: versionamento da estrutura de diretótio, tratamento
aperfeiçoado de tipo de arquivo, ramificação de versões e mesclagem mais
simples e mais amigáveis, suporte a links simbólicos, listas de propriedades
anexadas aos dados versionados, importação melhorada de dados de terceiros e
fácil atualização a partir do estoque do CVS.
OpenCM —
"O OpenCM é concebido como um substituto seguro para o CVS de alta
integridade. Uma lista das principais características pode ser encontrada na
página de recursos. Embora não seja tão "rico em recursos" como o CVS, ele
suporta algumas coisas úteis que o CVS não possui. Brevemente, o OpenCM oferece
suporte de primeira classe para renomeações e configuração, autenticação
criptografada e controle de acesso, e árvores de versões de primeira classe."
PRCS —
"O PRCS, Project Revision Control System, é a interface para uma série
de ferramentas que (como o CVS) oferece uma maneira de lidar com uma série de
arquivos e diretórios individualmente, preservando versões coerentes de toda a
série. ... Seu objetivo é similar ao do SCCS, RCS e CVS, mas (de acordo com os
seus autores, pelo menos) ele é muito mais simples do que todos aqueles
sistemas."
ArX —
O ArX é um sistema de controle de versão distribuída que oferece recursos
de árvore de versões e integração, verificação criptográfica de integração de
dados, e a habilidate de publicar arquivos facilmente em qualquer servidor
HTTP.
SourceJammer —
"O SourceJammer é um sistema controlador de código-fonte e versão escrito
em Java. Ele consiste de um componente do lado servidor que mantém os históricos
de arquivos e versões, e trata de ckeck-in, check-out, etc. e outros comandos;
e de um componente do lado cliente que faz pedidos ao servidor e gerencia os
arquivos do sistema de arquivos do lado cliente."
FastCST —
"Um sistema 'moderno' que usa changesets sobre revisões de arquivos e
operação distribuída em vez de controle centralizado. Tendo uma conta de e-mail
você pode usar o FastCST. Para distribuições maiores você só precisa de um
servidor FTP e/ou um servidor HTTP ou utilizar o comando embutido 'serve' para
servir teu material diretamente. Todos os changesets são diferentes
universalmente e possuem toneladas de meta-dados, desta maneira, você pode
rejeitar qualquer coisa que você não queira antes de testar. A integração
(merging) é feita comparando-se um changeset integrado com o atual conteúdo do
diretório, em vez de tentar integrá-lo com um outro changeset."
Superversion —
"O Superversion é um sistema de controle de versão distribuída
multi-usuário baseado em listas de mudanças (changesets). Ele pretende ser de
força industrial, uma alternativa de código aberto para as soluções comerciais,
sendo igualmente fácil de usar (ou ainda mais fácil) e igualmente poderoso. De
fato, usabilidade intuitiva e eficiente tem sido uma das principais prioridades
no desenvolvimento do Superversion desde o início."