Pergunta

Eu uso o SVN como o sistema de controle de origem, e gostaria de saber como comparar diretórios, ignorando quaisquer diferenças de metadados. Existe uma maneira de dizer svn diff para comparar apenas o conteúdo real e ignorar quaisquer metadados?

Quero dizer metadados como propriedades SVN, etc., que não afetam o conteúdo do arquivo. Assuma o arquivo X tem uma propriedade adicional no ramo B em comparação com tronco T. Infelizmente ele vai aparecer em 'svn diff T B', mesmo que o conteúdo real do arquivo X é o mesmo.

Eu olho para algo como isto:

svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-metadata --summarize

Update: eu resolver parcialmente esta por diff'ing diretamente no sistema de arquivos em vez de usar as ferramentas SVN. Ver a minha própria resposta abaixo ...

Foi útil?

Solução 5

Não parece haver nenhuma maneira de conseguir este feito usando o SVN built-in ferramentas. Como eu resolver aquilo: Exportar ambas as árvores e diff-los diretly no sistema de arquivos usando sua ferramenta de comparação favorito. Isso é de algum modo a única maneira de conseguir este feito: /

Outras dicas

Você pode passar a saída svn diff através de 'filterdiff --clean' para remover todas as linhas estranhas incluindo alterações de propriedade.

Se você usar a opção --summarize, em seguida, as alterações de propriedades são indicadas na segunda vez da primeira coluna.

i.,

M  URL  -- indicates content change
 M URL  -- property change
MM URL  -- content and property change

É um pouco mais fácil de grep. Eu acho que você poderia ter um processo de dois estágios, se você quer um diff completo - primeiro uso resumir para encontrar arquivos com a mudança de conteúdo, em seguida, diff-los

.

Nice dica de JosephWatkins.

Aqui está o comando para os usuários grep-júnior:

svn diff A B --summarize | grep '^. '

Os olhares grep para um espaço como o segundo personagem na linha.

Encontrei este enquanto procura através dos docs svn help

svn diff --patch-compatible

É o mesmo que correr

svn diff --show-copies-as-adds --ignore-properties

Aqui está um comando único que faz tudo isso. Digamos que você queira encontrar tudo (não-propriedade) diffs para todos os arquivos no diretório atualmente entre revisão 54833 e 57215. Este comando deve fazê-lo:

svn diff -r 54833:57215 --summarize | egrep -v '^ |^D|^A' | awk '{ print $2 }' | xargs svn diff -r 54833:57215

NB:. Ele só diffs arquivos modificados - arquivos não adicionados ou excluídos

Use svn diff --ignore-properties . Isso é do Subversion built-in método para fazer diferenciação de apenas o conteúdo. Ele ignora quaisquer alterações às propriedades dos itens.

Eu escrevi um script para fazer isso, depois que eu não poderia encontrar uma linha.

O script remove os dados com base em um conjunto de expressões regulares entraram no topo do script. Atualmente, ele está configurado para filtrar Propriedades as mudanças, mas ele pode remover qualquer alteração que corresponde a uma série de expressões regulares.

tubulação Apenas a saída do svn diff para o script, depois de definir o script. I colocar os filtros no script em vez de parâmetros, porque eu sempre executar os mesmos filtros.

I lançou como GPLv2.

clean_svn_diff.bash

Eu não tenho certeza, mas um simples 'svn diff | grep -iv "coisas para ignorar"' seria uma solução alternativa.

Você pode definir o svn: ignorar propriedade de arquivos e diretórios que você quer svn diff para ignorar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top