27.2. Determinando fatores para selecionar um programa

Há alguns fatores importantes a serem considerados ao decidir que programa será usado.

27.2.1. Cliente-servidor versus ponto a ponto

Dois modelos diferentes são comumente usados para distribuir dados. No primeiro modelo, todos os clientes sincronizam seus arquivos com um servidor central. O servidor deve ser acessível a todos os clientes pelo menos ocasionalmente. Esse modelo é usado pelo Subversion, CVS e WebDAV.

A outra possibilidade é deixar todos os hosts ligados em rede sincronizarem seus dados entre os pontos uns dos outros. Esse é o conceito seguido pelo unison. O rsync, na realidade, funciona no modo de cliente, mas qualquer cliente também pode atuar como um servidor.

27.2.2. Portabilidade

O Subversion, o CVS e o unison também estão disponíveis para muitos outros sistemas operacionais, incluindo vários sistemas Unix e Windows.

27.2.3. Interativo versus automático

No Subversion, no CVS, no WebDAV e no Unison, o usuário inicia manualmente a sincronização de dados. Isso permite um controle fino dos dados a serem sincronizados e um fácil gerenciamento de conflitos. No entanto, se os intervalos de sincronização forem muito longos, será mais provável que ocorram conflitos.

27.2.4. Conflitos: incidência e solução

Conflitos só ocorrem raramente no Subversion ou no CVS, mesmo quando muitas pessoas trabalham em um grande projeto de programa. Isso ocorre porque os documentos são fundidos na base de linhas individuais. Quando ocorre um conflito, somente um cliente é afetado. Normalmente, os conflitos no Subversion ou no CVS podem ser facilmente resolvidos.

O Unison reporta conflitos, permitindo que os arquivos afetados sejam excluídos da sincronização. Entretanto, as mudanças não podem ser fundidas tão facilmente quanto no Subversion ou no CVS.

Em oposição ao Subversion ou ao CVS, em que é possível aceitar parcialmente as mudanças em caso de conflito, o WebDAV só executa o registro da entrada quando toda a modificação é considerada bem-sucedida.

Não há gerenciamento de conflitos no rsync. O usuário é responsável por não sobregravar acidentalmente arquivos e resolver manualmente todos os possíveis conflitos. Para obter segurança, é possível empregar adicionalmente um sistema de controle de versão como o RCS.

27.2.5. Selecionando e adicionando arquivos

Em sua configuração padrão, o Unison sincroniza toda uma árvore de diretórios. Novos arquivos que aparecem na árvore são incluídos automaticamente na sincronização.

No Subversion ou no CVS, novos diretórios e arquivos devem ser adicionados explicitamente por meio do comando svn add ou o cvs add, respectivamente. Esse procedimento resulta em um maior controle do usuário sobre os arquivos a serem sincronizados. Por outro lado, novos arquivos são sempre ignorados, especialmente quando os pontos de interrogação na saída de svn update e svn status ou cvs update são ignorados devido ao grande número de arquivos.

27.2.6. Histórico

Um recurso adicional do Subversion ou do CVS é a possibilidade de reconstrução de versões antigas de arquivos. Um breve comentário de edição pode ser inserido em cada mudança, e o desenvolvimento dos arquivos pode ser facilmente rastreado posteriormente com base no conteúdo dos comentários. Essa é uma ajuda valiosa para textos de teses e de programas.

27.2.7. Volume de dados e requisitos do disco rígido

Os discos rígidos de todos os hosts envolvidos devem ter espaço em disco suficiente para todos os dados distribuídos. O Subversion e o CVS requerem espaço adicional para o banco de dados repositório no servidor. O histórico do arquivo também é armazenado no servidor, requerendo ainda mais espaço. Quando arquivos em formato de texto são mudados, somente as linhas modificadas são gravadas. Arquivos binários requerem espaço em disco adicional relativo ao tamanho do arquivo sempre que ele for mudado.

27.2.8. Interface gráfica do usuário (GUI)

O Unison oferece uma interface gráfica do usuário que exibe os procedimentos de sincronização a serem realizados. Aceite a proposta ou exclua arquivos específicos da sincronização. No modo de texto, confirme de forma interativa os procedimentos específicos.

Usuários experientes normalmente executam o Subversion ou o CVS a partir da linha de comando. Entretanto, as interfaces gráficas do usuário estão disponíveis para Linux, como a cervisia, e para outros sistemas operacionais, como a wincvs. Muitas ferramentas de desenvolvimento, como a kdevelop, e editores de texto, como o emacs, fornecem suporte para o CVS ou o Subversion. É sempre mais fácil realizar a resolução de conflitos com esses front ends.

27.2.9. Facilidade de uso

O Unison e o rsync são mais fáceis de usar e também mais adequados a usuários inexperientes. De certa forma, é mais difícil operar o CVS e o Subversion. Os usuários devem entender a interação entre o repositório e os dados locais. As mudanças dos dados devem ser primeiro fundidas localmente no repositório. Esse procedimento é executado com o comando cvs update ou svn update. Em seguida, os dados devem ser enviados de volta ao repositório com o comando cvs commit ou svn commit. Depois de compreender esse procedimento, os usuários inexperientes também serão capazes de usar o CVS e o Subversion com facilidade.

27.2.10. Segurança contra ataques

Durante a transmissão, o ideal é proteger os dados contra interceptação e manipulação. O Unison, o CVS, o rsync e o Subversion podem ser facilmente usados via ssh (secure shell - shell seguro), fornecendo segurança contra ataques deste tipo. A execução do CVS ou do Unison via rsh (remote shell - shell remoto) deve ser evitada. O acesso ao CVS com o mecanismo pserver em redes desprotegidas também não é recomendável. O Subversion já fornece as medidas de segurança necessárias ao ser executado com o Apache.

27.2.11. Proteção contra perda de dados

O CVS tem sido usado por desenvolvedores por um longo tempo para gerenciar projetos de programas e é extremamente estável. Como o histórico do desenvolvimento é gravado, o CVS fornece proteção até mesmo contra certos erros do usuário, como uma exclusão não intencional de um arquivo. Apesar de não ser tão comum quanto o CVS, o Subversion já está sendo empregado em ambientes de produção, como no próprio projeto do Subversion.

O Unison ainda é relativamente novo, mas ostenta um alto nível de estabilidade. Entretanto, ele é mais sensível a erros do usuário. Depois que a sincronização da exclusão de um arquivo é confirmada, não há como restaurar o arquivo.

Tabela 27.1. Recursos das ferramentas de sincronização de arquivos: -- = muito ruim, - = ruim ou não disponível, o = médio, + = bom, ++ = excelente, x = disponível

unison

CVS/SVN

rsync

mailsync

Cliente/Servidor

igual

C-S/C-S

C-S

igual

Portabilidade

Lin,Un*x,Win

Lin,Un*x,Win

Lin,Un*x,Win

Lin,Un*x

Interatividade

x

x/x

x

-

Velocidade

-

o/+

+

+

Conflitos

o

++/++

o

+

Sel. de arquivos

Dir.

Sel/arq., dir.

Dir.

Caixa de Correio

Histórico

-

x/x

-

-

Espaço em disco rígido

o

--

o

+

Interface gráfica do usuário (GUI)

+

o/o

-

-

Dificuldade

+

o/o

+

o

Ataques

+(ssh)

+/+(ssh)

+(ssh)

+(SSL)

Perda de dados

+

++/++

+

+