Configuração do Subversion no Windows

Quando se trata de controle de código-fonte gratuito e prontamente disponível, acho que não há nada melhor do que o Subversion no momento. Não estou necessariamente defendendo Subversion; há muitos outros sistemas excelentes de controle de código-fonte por aí, mas poucos conseguem igualar a onipresença e a relativa simplicidade do Subversion. Além disso, controle de código-fonte é controle de código-fonte, desde que o senhor esteja não esteja usando o Visual SourceSafe. E eu mencionei que o Subversion é … gratuito?

Permita-me ilustrar como é simples ter um pequeno servidor e cliente Subversion funcionando no Windows. Isso levará no máximo 30 minutos, eu prometo. E isso supondo que o senhor leia devagar.

A primeira coisa que faremos é baixar o instalador binário mais recente do Subversion para Windows. No momento em que este artigo foi escrito, essa versão é a 1.46. Recomendo que o senhor substitua o caminho de instalação padrão por algo mais curto:

c:svn

Observe que o instalador adiciona c:svnbin ao seu caminho, para que o senhor possa abrir um prompt de comando e começar a trabalhar com ele imediatamente. Vamos criar nosso primeiro repositório de código-fonte, que é efetivamente um caminho de sistema.

svnadmin create "c:svnrepository"

Dentro dessa pasta recém-criada, descomente as seguintes linhas no diretório conf/svnserve.conf removendo o caractere de libra do início de cada linha:

anon-access = none
auth-access = write
password-db = passwd

Em seguida, adicione alguns usuários à lista conf/passwd . O senhor pode descomentar os usuários padrão harry e sally para brincar com eles ou adicionar os seus próprios:

harry = harryssecret
sally = sallyssecret

A partir do Subversion 1.4, o senhor pode facilmente instalar o Subversion como um serviço do Windowspara que ele esteja sempre disponível. Basta emitir o seguinte comando:

sc create svnserver binpath= "c:svnbinsvnserve.exe --service -r c:svnrepository"
displayname= "Subversion" depend= Tcpip start= auto

Ele está configurado para iniciar automaticamente, de modo que será iniciado automaticamente quando o servidor for reinicializado, mas ainda não está em execução. Vamos corrigir isso:

net start svnserver

Observe que o serviço está sendo executado no diretório conta do sistema local. Normalmente, isso não tem problema, mas se o senhor planeja implementar qualquer script de gancho do Subversion posteriormente, o senhor pode querer mudar a identidade do serviço para uma conta de administrador com mais permissões. Isso é fácil de fazer por meio da GUI tradicional de serviços do Windows.

Captura de tela do serviço Subversion

Agora, vamos verificar se as coisas estão funcionando localmente, adicionando uma pasta de nível raiz no controle de origem para nosso novo projeto, apropriadamente chamado myproject.

set SVN_EDITOR=c:windowssystem32notepad.exe
svn mkdir svn://localhost/myproject

É um pouco estranho quando executado localmente no servidor, pois o Subversion exibe uma cópia do Notepad com um local para inserirmos comentários de confirmação. Todo bom programador sempre comenta suas ações de controle de origem, certo?

Compromisso local do Subversion, comentário no bloco de notas

Digite o comentário que desejar, salve e feche o Bloco de Notas. Neste ponto, será solicitado que o senhor forneça credenciais; ignore a solicitação de credenciais de administrador e pressione Enter. Use as credenciais que o senhor configurou anteriormente na seção conf/passwd que o senhor configurou anteriormente. Se tudo correr conforme o planejado, o senhor será recompensado com uma mensagem “committed revision 1”.

svn mkdir svn://localhost/myproject
Authentication realm: <svn://localhost:3690>
Password for 'Administrator': [enter]
Authentication realm: <svn://localhost:3690>
Username: sally
Password for 'sally': ************
Committed revision 1.

Parabéns! O senhor acabou de fazer o check-in da sua primeira alteração no controle de versão!

Especificamos svn:// como prefixo do nosso caminho de controle de origem, o que significa que estamos usando o protocolo Subversion nativo. O O protocolo Subversion opera na porta TCP 3690portanto, certifique-se de abrir uma brecha apropriada no firewall do seu servidor, caso contrário os clientes não conseguirão se conectar.

Agora que o servidor está pronto para funcionar, vamos voltar nossa atenção para o cliente. A maioria das pessoas usa TortoiseSVN para interagir com o Subversion. Faça o download do cliente Windows de 32 ou 64 bits mais recente (1.4.8.12137 no momento em que este texto foi escrito) e instale-o. O instalador dirá ao senhor para reiniciar, mas não é necessário. O instalador solicitará a reinicialização, mas não é necessário.

Agora, crie uma pasta de projeto em algum lugar de sua unidade. Eu usei c:myproject. O Tortoise não é um programa, mas uma extensão do shell. Para interagir com ele, o senhor clica com o botão direito do mouse no Explorer. Depois de criar a pasta do projeto, clique com o botão direito do mouse nela e selecione “SVN Checkout…”.

Tortoise

Tipo svn://servername/myproject/ para o URL do repositório e clique em OK.

Diálogo de checkout do Tortoise

O Tortoise agora associa a caixa de diálogo c:myproject com a pasta svn://servername/myproject no controle de origem. Qualquer coisa que o senhor fizer no caminho do sistema de arquivos local (bem, a maioria das coisas – há algumas condições extremas que podem ser estranhas) podem ser verificados novamente no controle de origem.

Há uma convenção padrão no Subversion para começar com as “pastas TTB” na raiz de qualquer projeto:

Como o Subversion usa cópias regulares de diretórios para ramificação e marcação (consulte Capítulo 4, Ramificação e mesclagem), a comunidade Subversion recomenda que o senhor escolha um local de repositório para cada raiz de projeto – o diretório “mais alto” que contém dados relacionados a esse projeto – e crie três subdiretórios abaixo dessa raiz: trunkou seja, o diretório no qual ocorre o desenvolvimento principal do projeto; ramificaçõesque é um diretório no qual o senhor pode criar várias ramificações nomeadas da linha de desenvolvimento principal; tagsque é uma coleção de instantâneos de árvores que são criados e talvez destruídos, mas nunca alterados.

É claro, nada disso significa que seus desenvolvedores irão realmente entenderão ramificação e mesclagemmas, como usuários responsáveis do Subversion, vamos adicionar obedientemente as pastas TTB ao nosso projeto. Observe que podemos agrupar quantas alterações quisermos e fazer o check-in de todas elas atomicamente como uma unidade. Quando terminarmos, clique com o botão direito do mouse na pasta e selecione “SVN Commit…”.

Tortoise 'SVN Commit...'

Na caixa de diálogo de confirmação, indique que sim, queremos fazer o check-in desses arquivos e que sempre inserir um comentário de check-in… certo? certo?

Diálogo do Tortoise Commit

O senhor terá que inserir suas credenciais de servidor aqui, mas o Tortoise se oferecerá para armazená-las convenientemente em cache para o senhor. Assim que o commit for concluído, observe que os arquivos aparecem no shell com ícones de controle de origem sobrepostos:

Pasta Tortoise com sobreposições de ícones de controle de origem

E agora terminamos. Bem, quase. Há algumas configurações no Tortoise às quais o senhor precisa prestar atenção especial. Clique com o botão direito do mouse e selecione “TortoiseSVN, Settings”.

  1. Está vendo aquela pasta “.svn” oculta? Essas pastas são onde o Subversion coloca seus metadados ocultos para que possa acompanhar o que o usuário está fazendo no sistema de arquivos local e resolver essas alterações com o servidor. Infelizmente, a convenção de nomenclatura padrão dessas pastas entra em conflito com algumas suposições fundamentais do ASP.NET. Se o senhor for um desenvolvedor do ASP.NET 1.x, precisará mudar as pastas ocultas de “.svn” para o formato “_svn”., que está na página Opções gerais. Esse hack é não é mais necessário no ASP.NET 2.0 ou mais recente.
  2. Nunca entenderei o motivo, mas, por padrão, o Tortoise tenta aplicar sobreposições de controle de origem em todas as pastas e unidades do seu sistema. Isso pode levar a alguns problemas estranhos e frustrantes de bloqueio de arquivos. É muito melhor deixar o Tortoise saber que ele deve apenas faz sua mágica de shell em pastas específicas. Defina isso em “Icon Overlays”; procure os caminhos de exclusão e inclusão. Eu defini o caminho de exclusão para tudo e o caminho de inclusão para apenas a(s) pasta(s) do meu projeto.

    caminhos de exclusão e inclusão do tortoise

Infelizmente, como o Tortoise é uma extensão de shell, as alterações de configuração podem significar que o senhor precisará reinicializar. O senhor pode tentar encerrar e reiniciar o explorer.exe, mas tive resultados variados com isso.

E com isso, terminamos. O senhor configurou com sucesso um servidor e um cliente Subversion. Um sistema moderno de controle de código-fonte cliente-servidor em 30 minutos – nada mal. Como de costume, esta é apenas a mais suave das introduções; eu o encorajo a conferir o a excelente documentação do Subversion para obter mais detalhes.

Considero o Subversion um excelente e moderno sistema de controle de código-fonte. Quaisquer pequenas deficiências que ele tenha (e há algumas, para ser claro) são mais do que compensadas por sua onipresença, relativa simplicidade e suporte robusto da comunidade. No interesse da igualdade de tempo, entretanto, devo mencionar que alguns desenvolvedores influentes — mais notavelmente Linus Torvaldsódio Subversão e a vê como um mal real. Há uma classe emergente de controle de revisão distribuída que poderia eventualmente substituir todos os sistemas de controle de código-fonte centralizados existentes, como Subversion, Vault, Team System e Perforce.

Sou cético. Conheci pouquíssimos desenvolvedores que realmente entenderam os conceitos de controle de versão no modelo simples de controle de código-fonte centralizado. Tenho apenas a mais vaga esperança de que esses desenvolvedores consigam entender o vastamente modelo muito mais complicado e poderoso de controle de código-fonte distribuído. Foi necessário quinze anos para o uso do controle centralizado de fontes se tornasse popular, portanto, é sempre recomendável um pouco de paciência.