Muito útil para obter todos arquivos modificados em um branch, por exemplo:
svn diff -r 472:HEAD --summarize ./
O branch foi criado na revision 472, e como não temos desenvolvimento no trunk atualmente, peguei as alterações entre 472 e HEAD. No lugar de HEAD pode ser o número de outra revision.
O retorno do comando acima é parecido com o conteúdo abaixo:
M PHP/include/lib/Form.inc.php M PHP/include/lib/Detail.inc.php A PHP/html/js/jquery.maskedinput-1.2.2.min.js M PHP/html/js/teclas_atalho.js A PHP/html/service/ajax/addFaixaCep.php A PHP/html/service/ajax/isCepAtendido.php A PHP/html/service/ajax/getCidades.php A PHP/html/service/ajax/getRegioes.php A PHP/html/service/ajax/removeFaixaCep.php A PHP/html/service/ajax/getCliente.php A PHP/html/service/ajax/createPedido.php A PHP/html/service/ajax M PHP/html/gestao/default/css/gerenciamento.css A PHP/html/gestao/cadastro/rota_entrega_det.php
Outros comandos que utilizei em conjunto:
svn diff -r 472:HEAD --summarize ./ | cut -c9- | \ grep -i -E "\.\w+$" | \ xargs cp --parents -r -t \ /home/william.comnisky/Desktop/Melhorias/
Update 22/08/2011: como sugestão do @lepkoski, adicionei o grep acima, evitando copiar todos arquivos do diretório incorretamente.
A partir do retorno mostrado acima, com o cut ignoro o status do arquivo no SVN e elimino os espaços em brancos com “-c9-”, ou seja, a partir do nono caractere em diante. Feito isso, utilizo o cp em conjunto com o xargs para copiar os arquivos com a mesma estrutura de diretórios para um novo diretório.
Importante: eu não estou considerando os status do SVN pois só terei adições e modificações de arquivos e diretórios. Porém, se na diferença entre revisões tiver alguma exclusão, é importante levar o status em consideração.
Tendo a estrutura montada nesse novo diretório, utilizo o ls em conjunto com o egrep
ls --format=single-column -R \ /home/william.comnisky/Desktop/Melhorias/ \ -F | egrep "[^/]$"
Posts relacionados:
