Git para SVN de forma manual

Tem esse projeto que eu comecei usando o Git, mas tenho que entregar em um SVN.

Daí para não bagunçar o checkout que fiz do SVN resolvi continuar usando o Git e copiar os arquivos para o diretório onde está o checkout do SVN.

Para saber quais arquivos tenho que copiar uso o

git diff <id_do_commit_que_ainda_não_copiei> --name-only

Para copiar os arquivos listados eu uso o xargs* com cp.

xargs -I {} cp {} ../projeto_no_svn/{}

Assim, para cada arquivo listado pelo git diff, o xargs vai executar um comando:

cp diretorio/arquivo.algumacoisa ../projeto_no_svn/diretorio/arquivo.algumacoisa

O comando completo fica:

git diff <id_do_commit_que_ainda_não_copiei> --name-only | xargs -I {} cp {} ../projeto_no_svn/{}

* Fonte: http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/

CVS – removendo diretórios

Estou trabalhando em um projeto com CVS e preciso remover uma pasta que foi adicionada incorretamente.
O problema é que o CVS não tem remove para pastas, só para arquivos. Quando uma pasta fica vazia ele remove a pasta. O que me leva a seguinte solução:

Para cada arquivo dentro da pasta que você quer remover:

  1. rm nome_do_arquivo
  2. cvs remove nome_do_arquivo

Dá pra entender que iria ser um porre, né? Então, eis que o bash aparece para salvar o dia:

ls -a | grep -v -E “CVS|^\.” | xargs -i bash -c “rm {}; cvs remove {}”

Apaga todos os arquivos da pasta, e remove do cvs, sem apagar os arquivos da pasta do CVS.