Cenários para a interação Bazaar e SVN

1

Na nossa empresa, estamos usando o repositório SVN. Estou fazendo programação tanto do trabalho (local principal) quanto do lar (principalmente experimentos e refatoração). Essas são duas máquinas diferentes, em redes diferentes e quase nunca ligadas ao mesmo tempo (afinal eu estou no trabalho ou em casa ...)

Eu queria dar uma chance a algum sistema de controle de versão distribuído e resolver alguns dos problemas associados ao processo baseado em SVN e ter duas máquinas. De git, Mercurial e Bazaar eu escolhi começar com o Bazaar, uma vez que afirma que ele é projetado para ser usado por seres humanos. É minha primeira vez com o sistema distribuído e ter interface de usuário agradável e fácil foi importante para mim.

Os recursos que eu queria alcançar eram:

  1. Poder atualizar do repositório SVN e se comprometer com ele.
  2. Poder comprometer localmente etapas do meu trabalho em uma tarefa.
  3. Poder ter poucas tarefas separadas ao mesmo tempo em suas próprias ramificações locais.
  4. Poder compartilhar essas ramificações entre meu trabalho e o computador doméstico.

Como meio de transporte entre o trabalho e o computador em casa, eu queria usar um pen-drive. O servidor da empresa não funcionará, pois não posso instalar nada. Nenhum deles funcionará como um repositório de serviços da web, pois eu não posso fazer o upload do código-fonte para a web (especialmente se for público, o que parece ser um caso comum em serviços gratuitos da web).

Este transporte deve ser baseado no Bazaar (ou o que mais eu terminarei) para que ele possa ser feito de forma mais ou menos automática, mas copiando e colando manualmente algumas pastas ou gerando arquivos de correção (contanto que funcionem - tenho experiência ruim com arquivos de patch no SVN) também funcionaria se não houvesse uma solução melhor.

No entanto, o pen-drive só deve ser usado para transporte. Eu não quero editar ou construir lá.

Eu tentei seguir as orientações do Bazaar para integração com o SVN. Mas eu falhei. Eu tentei os dois

bzr svn-import

e

bzr checkout

fornecendo URL do meu repositório como https://... e svn+https://... . Em alguns casos, houve alguns problemas com certificados, mas o argumento de saída especificou para ignorá-los, então eu fiz isso. Às vezes pedia para eu logar (em outros casos talvez lembrasse ... não sei) o que fiz.

Todos estavam rodando muito devagar (isso poderia ser nosso problema no servidor) e em algum momento foram interrompidos devido a interrupção da conexão (isso quase com certeza é o nosso problema no servidor: trunca a conexão depois de algum tempo). Mas como (ao contrário do SVN) o reinício começa de novo e não a partir do ponto em que foi interrompido, não consegui alcançar todas as revisões ~ 19000 (terminando normalmente em torno de 150).

O que e como devo fazer com o Bazaar? É possível de alguma forma importar o repositório SVN do checkout local (para que eu não sofra o truncamento de conexão)? Disseram-me que um colega que trabalhava conosco fazia algo semelhante (importando o repositório SVN com histórico completo) com o Mercurial, como em nenhum momento. Então, estou pensando seriamente em testar o Mercurial, mesmo que seja apenas para ver se isso funcionará.

Mas quais são as suas diretrizes gerais para alcançar os recursos listados?

    
por Adam Badura 26.03.2012 / 15:37

2 respostas

1

Eu acredito que o Bazaar é o mais sensato DVCS, e é especialmente bom para usuários familiarizados com o Subversion. Pode ser usado muito eficientemente com um sistema Subversion.

Parece que o comando bzr svn-import importa todos os ramos do Subversion, o que provavelmente não é o que você deseja. Não é possível importar de um checkout do Subversion porque o Subversion não mantém todo o histórico localmente.

Como você deseja usar várias ramificações, primeiro crie um repositório compartilhado para economizar espaço em disco e tempo durante a ramificação.

bzr init-repo ~/project

Em seguida, use o comando bzr checkout para criar um checkout no seu tronco do Subversion. Especifique o URL do Subversion para o tronco do projeto.

cd ~/project
bzr checkout https://svn.example.com/project/trunk trunk

Você então terá uma árvore Bazaar em ~ / project / trunk que está vinculada ao tronco do Subversion. Um ramo limite significa que os commits são automaticamente enviados para o branch remoto, isto é, qualquer coisa que você comete aqui será confirmada no trunk do Subversion.

Quando você quiser fazer algumas alterações, crie uma nova ramificação no tronco local.

cd ~/project
bzr branch trunk fix-some-bugs

Trabalhe em ~ / project / fix-some-bugs e confirme ao longo do processo. Tudo isso acontecerá localmente e não afetará o tronco do Subversion. Você pode criar quantos galhos desejar.

Quando você quiser submeter essas mudanças ao tronco do Subversion, mescle o ramo em seu tronco local. Primeiro, certifique-se de que seu tronco local esteja atualizado usando bzr pull .

cd ~/project/trunk
bzr pull
bzr merge ../fix-some-bugs
bzr commit

Isto irá comprometer todas as mudanças que você fez no branch como uma única revisão no Subversion (mesmo se você fez vários commits no branch).

    
por 02.06.2012 / 06:22
0

Existe uma maneira de continuar os checkouts interrompidos. Se você criar um repositório compartilhado e, em seguida, iniciar o check-out dentro dele, se o check-out for interrompido, será possível excluir o diretório com dados incompletos e repetir o comando checkout. Assim:

bzr init-repo ~/project
cd ~/project
bzr checkout https://svn.example.com/project/trunk
# ... gets interrupted ...
rm -fr trunk
bzr checkout https://svn.example.com/project/trunk

Repita o check-out enquanto for necessário.

Btw, o checkout é extremamente lento no início, porque faz o download do histórico completo. Esta também é a razão pela qual você não pode simplesmente importar uma verificação de subversão local, porque o subversion só baixa uma única revisão, não possui o histórico completo.

Após a conclusão da verificação, você pode usar o ramo exatamente da mesma maneira que usa o subversion. Antes de começar a trabalhar em um novo código, você faz bzr update para obter o máximo e melhor do projeto da sua empresa, quando você quer comprometer você como de costume, e ele estará comprometido com o Subversion.

Você pode usar os recursos distribuídos do Bazaar ao máximo. Tudo o que você descreve em sua pergunta é possível com o Bazaar, mas fazê-lo requer um bom entendimento do controle de versão distribuído. O fato de que o servidor de repositório backend é Subversion, faz pouca ou nenhuma diferença na prática, o plugin bzr-svn torna tudo transparente.

    
por 08.06.2012 / 21:15

Tags