Criando um repositório SVN no Dropbox

Olá, povo! O post da vez é bem útil para quem trabalha com desenvolvimento de sistemas.

Todo desenvolvedor já deve ter usado (se não usou então use!) algum sistema de controle de versão (CVS, SVN…), e quando estamos falando de desenvolvimento de um projeto em equipe então isso se torna crucial para a saúde do seu projeto.

Eu que o diga! Lembro bem do alvoroço e do stress pelo que passei com minha equipe quando estávamos desenvolvendo um projeto da universidade sem usar controle de versão, a falta de experiência e o pouco conhecimento na época foram os principais motivos, mas o bom é que aprendemos a forma como NÃO fazer.

Para esses e outros projetos existem alguns sistemas de repositórios já bem conhecidos na comunidade, sendo os principais o GoogleCode e o SourceForge (ambos gratuito/open source), Github (open source / privado) e o Code Spaces (somente privado).

No  GoogleCode e no SourceForge você não precisa pagar pelo serviço e o seu projeto é open source, ou seja, qualquer pessoa pode ler o seu código fonte. A qualidade do serviço é muita boa em ambos. O Github também oferece serviço gratuito.

Mas e se você não quiser compartilhar seu código? Se você está desenvolvendo algum projeto que não queira deixá-lo aberto a todos você precisa de um repositório privado. O Github tem alguns planos, que variam entre US$ 7 e US$ 200. Já o Code Spaces oferece planos entre US$ 2,99 e US$ 59,99 (valores de outubro de 2011).

Mas e se você quiser um repositório privado e também não quiser pagar por ele? Nesse caso alguém teve a ideia de juntar um espaço virtual com um cliente SVN. Nesse tutorial vou mostrar como transformar o seu Dropbox em um repositório. A ideia é bem simples: usar uma pasta compartilhada no Dropbox para servir como repositório e o cliente TortoiseSVN para criar o repositório propriamente dito.

Mas vamos ao que interessa…

1 – Pra começar é necessário ter uma conta no Dropbox (clique neste link para se registrar), instalar o cliente Dropbox na sua máquina e baixar (e instalar) o TortoiseSVN.

2 – Depois de tudo instalado, vá na pasta raiz do Dropbox no seu computador e crie uma pasta que será o repositório do projeto (aqui chamei a pasta de MeuRepositorio).

Clique com o botão direito na pasta e vá em “TortoiseSVN” > “Create repository here” (figura 1). Uma janelinha deve abrir, e nela clique em “Create folder structure” (clique OK nas duas janelas) (figura 2). Com isso já temos o repositório criado (imagine que essa pasta esteja no servidor, não na sua máquina).

figura 1

figura 2

3 – Agora crie uma pasta fora do Dropbox, essa pasta será o lado cliente (local) da estrutura. Clique com o botão direito na pasta e vá em “SVN Checkout” (figura 3). Na janela que irá abrir informe o caminho do seu repositório em “URL of repository” (figura 4), que você criou anteriormente no passo 2.

figura 3

figura 4

Pronto! Com isso você tem um repositório privado e um controle de versões. O Dropbox fornece inicialmente* 2GB de espaço, o que dá pra colocar bastante coisa. Pode parecer complicado, mas é simples.

Se quiser que outro membro da equipe tenha acesso ao repositório é só ir ao Dropbox e compartilhar a pasta do repositório. O Dropbox desse outro membro da equipe irá automaticamente atualizar (baixar) a pasta que foi compartilhada. Feito isso, basta executar o passo 3.

Com o TortoiseSVN você faz o controle de conflitos, de commits, updates etc., mas isso não é do escopo do tutorial.

E o Linux?

Bom, o TortoiseSVN só tem versões para Windows. Quem usa alguma distribuição Linux pode usar o NautilusSVN, que parece que agora foi substituído pelo RabbitVCS (http://rabbitvcs.org/). E aí pode surgir um problema: o fato de se ter máquinas com clientes SVN diferentes pode fazer com o que o controle de versões não funcione corretamente. Se isso acontecer, a solução pode estar mesmo em usar um repositório pago como o Github ou o Code Spaces.

Observação: olhando a pasta do Dropbox percebi que a estrutura criada pelo TortoiseSVN (pastas trunk/branches/tags) não aparecem lá. Não entendi o porquê disso, já que elas de fato existem. Se alguém souber o porquê deixa nos comentários que eu atualizo o post, ok?

Espero que o mini tutorial tenha ajudado. =)

iNté+!

* O Dropbox te dá mais 250MB por cada usuário que você indicar.

24 comments so far

  1. ricardomarino on

    Muito obrigado… A dica ajudou muito em um projeto que estou fazendo!
    VLW

  2. Mathias on

    Como faço para utilizar com NetBeans?

    • Thiago P. on

      Mathias, você pode usar esse esquema com qualquer IDE. A forma que mostrei no tutorial independe da IDE que você usa. É só abrir o projeto (que no exemplo eu coloquei em D:\Dropbox\MeuProjeto) no Eclipse ou no Netbeans e usar normalmente.

    • Florentina on

      It’s a shame you don’t have a donate button! I’d definitely donate to this fantastic blog! I guess for now i’ll settle for book-marking and adding your RSS feed to my Google account. I look forward to brand new updates and will talk about this site with my Facebook group. Chat soon!

  3. Herivelton Meira on

    Ótimo!

  4. agvillaca on

    Thiago, esta é uma ótica dica para se ter um backup atualizado do repositório mas, se me permite fazer uma crítica construtiva, não acho uma boa idéia usar o dropbox para compartilhar o repositório com alguém que esteja trabalhando no mesmo projeto. Vou explicar o porquê:
    Neste caso, o SVN seria usado apenas localmente nas duas máquinas, com um server instalado em ambas e o repositório na pasta do DB (Dropbox). Agora imagine o seguinte cenário: eu altero um arquivo na minha máquina e faço o commit. A revision do repositório vai para 20 e o DB envia o rep novo para o site (vou chamar o repositório do DB de site, para não confundir com o nosso repositório do SVN). Enquanto isso, você está offline e faz uma outra alteração qualquer, comita e a sua revision também vai para 20, porém com alterações diferentes da minha revision 20. Quando você ficar online, o DB vai tentar sincronizar o seu rep com o rep que está no site e não vai conseguir gerenciar este conflito. Assim, no mínimo você irá perder o histórico do SVN, sem contar a enorme chance de corromper o repositório.
    Para trabalhos assim, é necessário que os dois clientes se conectem a um mesmo server do SVN e deixe para o DB apenas o papel de backup mesmo. Uma alternativa seria usar um SCM descentralizado, como o GIT e o Mercurial, que têm recursos para gerenciar essa situação. Espero ter ajudado.

    • Thiago P. on

      Alexandre, obrigado por colaborar. Mas, primeiro, o repositório do Dropbox é o próprio repositório SVN (que seria o servidor). E vamos ao cenário, supondo que estamos no mesmo projeto. Você altera um arquivo na sua máquina e commita (os arquivos alterados vão para a pasta/repositório do Dropbox na sua máquina e, consequentemente, para o “site”, quando o DB sincroniza). Eu altero o mesmo arquivo que você commitou agora há pouco, mas ANTES de eu commitar, eu preciso sincronizar meu arquivo com o repositório (essa repositório é o Dropbox!), justamente para evitar conflitos e, se houver, corrigí-los através do Tortoise. Se não houver conflitos eu posso commitar normalmente, e quando você for sincronizar com o repositório você vai ter o arquivo atualizado com as minhas alterações.
      Veja: repositório SVN = repositório Dropbox = “site”, entendeu? Agora, com relação ao histórico do SVN realmente eu preciso ver depois testando melhor, mas talvez perca mesmo.
      Valeu pela dica e se eu estiver errado é só falar aí. xD

  5. Filipe Cavalcante on

    Primeiro Parabéns pela postagem Thiago.

    Só tenho uma dúvida. Posso utilizar o SVN do eclipse ou tem que ser tortoise? Ou usar o tortoise só pra criar, e usar o SVN do eclipse para manipular?

    Valeu!!

  6. Adilson Dal Olmo on

    Tiago, respondendo a sua dúvida:

    ” Observação: olhando a pasta do Dropbox percebi que a estrutura criada pelo TortoiseSVN (pastas trunk/branches/tags) não aparecem lá. Não entendi o porquê disso, já que elas de fato existem. Se alguém souber o porquê deixa nos comentários que eu atualizo o post, ok? ”

    Na etapa da figura 2, você precisa clicar no botão “Create Folder Structure” ANTES de clicar em OK

  7. Fábio on

    Qual configuração eu coloco para um usuário de fora poder dar o SVN Checout na parte “URL of repository”, logo após eu dar a permissão de compartilhamento para ele?

    • Thiago P. on

      Fábio, o “URL of repository” é o endereço local do seu Dropbox. Um usuário externo baixa o projeto na pasta Dropbox dele e aponta essa URL pra lá (que para ele será local), entendeu?

  8. Paulo Souza on

    Como faço os commits e updates ?

  9. Paulo Souza on

    Ai eu passo só o link do dropbox lá ?

    • Thiago P. on

      Eu nao lembro exatamente o que precisa configurar no Subclipse, acho que soh o utilizei uma vez e isso na epoca de universidade. Mas com certeza tu vai precisar informar a URL do repositorio (que no caso eh o diretorio do dropbox).

  10. Diogo on

    Quando o outro membro criar no maquina dele a pasta, o caminho do repositorio que ele tem que colocar é o link da pasta do dropbox certo?

  11. Diogo on

    Thiago, criei uma pasta em outra maquina, mas quando eu fui colocar o link da pasta do dropbox ele acusa um erro

  12. Ariel on

    Obrigado… A tempos estava procurando algo parecido e não pensei nisso. Simples, Intuitivo e Objetivo! Valeu mesmo.

  13. Lygia L on

    Olá, respondendo a sua pergunta, ficou óbvio: você criou uma pasta chamada MeuRepositorio para fazer dele o seu repositório. Porém, notei que algo estava desconexo nas imagens do seu exemplo. A pasta MeuRepositorio você não deve ter criado dentro do Dropbox. E daí, quando você foi fazer o checkout para a sua pasta local que você chamou de MeuProjeto, você fez o checkout da pasta chamada MeuSVN no Dropbox e não do MeuRepositorio! Ou seja, você fez uma confusão nos caminhos e a pasta MeuRepositorio onde você fez o “Create repository here” não está lá no Dropbox e sim na sua máquina local.

    • Lygia L on

      Porém, a resposta do Adilson Dal Olmo também pode ser verdadeira.


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: