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
  • Como descobrir o real encoding de um arquivo em java
  • Git Workflow
  • Configuração de caminhos no LaTeX
  • Google em Inglês
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.