segunda-feira, 3 de janeiro de 2011

Ignorando Arquivos com o SVN (ou: Onde Coloco o meu .cvsignore no SVN??)

Quem migrou do CVS para o SVN, especialmente aqueles que converteram seus repositórios com as ferramentas existentes e continuaram seus projetos com o novo versionador, talvez tenha notado que, no SVN (ou Subversion), o antigo arquivo ".cvsignore" não produz nenhum efeito... este presente artigo ensina como fazer o SVN aprender a ignorar alguns arquivos que não devem ser versionados e as diferenças entre o SVN e o CVS consoante a este assunto.


  • Ignorando Arquivos com o CVS

É famoso e fácil esse truque de ignorar arquivos com o CVS. Basta se criar um arquivo chamado ".cvsignore" na pasta onde os arquivos a serem ignorados ficarão (apenas na pasta, não nas sub-pastas!!). Este deverá ser um arquivo texto, contendo, a cada linha, o nome de um arquivo a ser ignorado (você pode usar caracteres como "*", para designar grupos de arquivos com nomes semelhantes).
Isto faz o cliente (e não o servidor!) do CVS deixar de observar os arquivos listados, mas você, um cara esperto, pode subir o arquivo ".cvsignore" e forçar que todos da sua equipe façam o update do mesmo, de forma que aqueles tais arquivos a serem ignorados serão sempre ignorados em todas as máquinas dos membros de sua equipe e nunca serão enviados para versionamento.
Um exemplo de arquivo .cvsignore é:

cat .cvsignore
*jar
*sh
*bat
*bak
*~

Desvantagens do uso desta técnica são:

1- Você depende de um arquivo local que diga o que ignorar, então o servidor não tem controle sobre isto;
2- Pode ser que dois desenvolvedores com arquivos ".cvsignore" diferentes (ou um desenvolvedor sem o tal arquivo) acabem fazendo filtragens diferentes, o que pode culminar no envio indesejado de um arquivo para o versionamento.


  • Ignorando Arquivos com o SVN

Por motivos como o exposto acima, o SVN não utiliza esta técnica (então, não há arquivos ".cvsignore" nem nenhum tipo de ".svnignore"!! Não tente criar este arquivo apenas por força da analogia, pois não funcionará!!).
Para o Subversion, o controle sobre os arquivos a serem ignorados deve estar o tempo todo no servidor, e é adicionado através de uma propriedade de uma pasta. Esta propriedade é criada na pasta específica onde os arquivos serão ignorados e, após a sua criação, a pasta é considerada alterada e necessitará de um commit para efetivação da propriedade no servidor.
Após esta efetivação, os outros membros de sua equipe deverão ver, em seus clientes do SVN, que a pasta foi modificada (porém sem qualquer menção aos arquivos internos desta pasta) e, ao baixarem a nova versão da pasta, automaticamente terão marcada a propriedade responsável por ignorar os arquivos indesejados.
Esta operação gera um número de revisão.


  • Como Definir a Propriedade Que Ignora Arquivos no SVN??

A referida propriedade chama-se svn:ignore e pode ser adicionada de várias maneiras, dependendo de seu cliente de SVN, estando sempre relacionada à pasta cujo conteúdo será filtrado (e não a uma pasta raíz... o conteúdo é filtrado na pasta onde a propriedade é definida, e não nas sub-pastas!!). Assim, se você utiliza o terminal, basta digitar, por exemplo:

svn propset svn:ignore .~* articles/

Isto instrui ao SVN que defina a propriedade (propset) chamada svn:ignore com o valor ".~*" para o diretório articles/. Este modelo, por exemplo, força que um diretório chamado articles, supostamente de documentos do Open Office, ignore todos os arquivos temporários do Open Office, que normalmente têm o nome criado a partir da fórmula ".~[nome do arquivo original]#". Agora, faça o commit, para subir ao servidor esta alteração!!
Se você utiliza um cliente gráfico, como o plugin Subclipse para o Eclipse (do qual falamos detalhadamente neste artigo), basta clicar na pasta desejada com o botão direito e escolher a opção Team, sub-opção "Set Property...", conforme mostrado na Figura 01, abaixo (clique para ampliar a figura!!):


Figura 01: Selecionando a opção para criar a propriedade.

Na janela que surgir, escolha a propriedade svn:ignore e digite, na caixa de texto abaixo, todos os tipos de arquivos que devem ser ignorados, podendo usar o caracter "*" à vontade!! Vide Figura 02:


Figura 02: Definindo a propriedade svn:ignore.

Agora, a pasta que sofreu a configuração estará marcada como modificada e você deverá efetivar esta modificação, enviando-a para o servidor (faça um commit!!). Automaticamente, todos os membros da sua equipe de trabalho, após atualizarem seus projetos pelo repositório (ou seja, após fazerem um update), terão suas configurações de ignorar arquivos ajustada!!

Vantagens desta abordagem são:

1- Não há dependência de um arquivo local, o que impede o problema clássico de um desenvolvedor criar ou modificar este arquivo, esquecer de subir para o servidor, e a equipe começar a trabalhar com políticas diferentes de seleção de arquivos para versionamento.
2- Gera mais consistência entre a pasta e os arquivos permitidos para ela, dificultado que alguém burle esta regra, pois todos serão de certa forma forçados a fazer previamente o update da pasta se quiserem inserir ou modificar algum arquivo nela.
3- A definição da propriedade gera um número de revisão, com sua respectiva mensagem, documentando e caracterizando o ato.

Bom, pessoal... espero que este tutorial tenha ajudado a vocês!! Boa sorte!! (Ah!, COMENTEM aí embaixo!!!).

2 comentários:

Anônimo disse...

Valeu Pajebriel, estava procurando essa.

Moises Dutra

O Pajé disse...

Grande Moisés!!

É um prazer encontrá-lo no Pajé Online!! Seja sempre bem-vindo!! Fico muito feliz de poder colaborar contigo!!