VidaGeek.net

Linux, Open-source, Programação e Produtividade

Como remover os malditos .svn

Uma das coisas que mais me atrapalhava com o svn era quando eu queria gerar um snapshot do que tinha no repositório, mas sem os .svn .

Um one-liner bash que faz isso:


	find . -iname .svn | xargs rm -fr

Explicação:

  1. find . -iname .svn: Encontra todos os arquivos ou diretórios que se chamem .svn
  2. xargs rm -fr: O xargs é um programa que executa o que vier depois dele pra cada linha que ele receber como entrada. Por isso apaga todos os .svn.

Posts Relacionados:

  • Como descobrir todos que commitaram em um repositório SVN
  • Como migrar de SVN para GIT
  • Git Workflow
  • Desfazendo o envio de um e-mail enviado pelo Postfix
  • Truques do Bash
  • Por que filtrar ips não deu certo
  • Sincronizando o Address Book do seu mac com os Contatos do Gmail
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.

    Recentemente escrevi um post sobre como migrar seu repositório svn para o git. Em um dos passos falo pra você criar uma lista de mapeamento dos seus usuários do svn para os do git. O único problema disso é descobrir quem são eles. Aqui vai um one-liner de bash que resolve isso :)

    
    svn log | grep "^r[0-9]" | \\
    sed -E "s/^.*\|(.*)\|.*\|.*$/\1/" | \\
    sort | uniq > seu_arquivo_com_os_usuarios
    

    Explicação da bizarrice acima:

    1. svn log: Exibe todo o log de commits feitos naquele repositório.
    2. grep “^r[0-9]“: Pega todas as linhas iniciadas com r seguido por um número (header de cada commit do svn)
    3. sed -E “s/^.*\|(.*)\|.*\|.*$/\1/”: Roda o monstro chamado sed em modo estendido e captura o nome dos usuários (conte o número de pipes)
    4. sort: Ordena a lista com os usuários que comitaram.
    5. uniq: elimina todas as duplicatas deixando apenas uma cópia de cada usuário (só funciona em listas ordenadas. Por isso o sort anterior).

    Tentei fazer usando o comando cut no lugar do sed, mas o cut desistia no meio do caminho por causa de caracteres estranhos.

    Posts Relacionados:

  • Como migrar de SVN para GIT
  • Como remover os malditos .svn
  • Truques do Bash
  • Git Workflow
  • Configuração de caminhos no LaTeX
  • Google em Inglês
  • Vidageek é aceito com instituição mentora do Google Summer of Code
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.

  • 1 Comment
  • Filed under: Dicas, Linux, Programacao
  • Como migrar de SVN para GIT

    Sei que tem um monte de tutoriais por aí de como migrar de svn para git, mas não achei nenhum com tudo que eu precisasse e em português. Então aqui vai o meu :)

    WARNING!!!! Se você tem um repositório svn público e vai migrar para o github, use o script de migração que ele te oferece quando você cria um repositório lá.

    1. Primeiro você deve instalar o git-svn. Não sei como instalar via apt, mas com o macports é um simples sudo port install git-core +svn (talvez você precise desinstalar o git-core antes de conseguir instalar. Se for o caso, sudo port uninstall git-core)

    2. Crie um arquivo mapeando os usuários do svn para os do git. Algo como:

      jonas = Jonas Abreu <jonas@vidagek.net>
      usuario_svn = Nome Usuario <email@usuario.net>
      

      Dê o nome que quiser para o arquivo.

    3. Faça checkout com o git svn

      mkdir repo_temp
      cd repo_temp
      git svn init URL_DO_SEU_REPOSITORIO_SVN --no-metadata
      git config svn.authorsfile ARQUIVO_DE_MAPEAMENTO
      git svn fetch
      

      É bem importante não esquecer do –no-metadata. Isso vai evitar que ele traga um monte de lixo (.svn, se não me engano) para sua máquina.

    4. Limpe a sujeira que o git svn colocou no seu repositório git local clonando ele.

      cd ..
      git clone repo_temp repo_final
      
    5. Altere a url da origem do seu repositório local:

      cd repo_final
       .git/config
      

      Troque a url:

      [remote "origin"]
            url = repo_temp
      

      pela url do seu repositório git:

      [remote "origin"]
             url = URL_DO_SEU_REPOSITORIO
      
    6. Envie os dados para o seu servidor remoto:

      git push origin master
      

    Pronto. Seu repositório acabou de ser migrado de svn para git. Simples, fácil e rápido (a não ser que você tenha uns 10k commits. Aí vai demorar bastante. No meu caso demorou cerca de 4 horas o processo completo.)

    Posts Relacionados:

  • Como descobrir todos que commitaram em um repositório SVN
  • Como remover os malditos .svn
  • Git Workflow
  • Como desfazer commits na branch errada no Git
  • Cuba Libre
  • Ubuntu Ganha o Parlamento Francês
  • Ambiente aberto de Xadrez Online
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.