Question

J'utilise SVN comme système de contrôle de source et je me demande comment comparer des annuaires en ignorant les différences de métadonnées. Existe-t-il un moyen d'indiquer à svn diff de ne comparer que le contenu réel et d'ignorer les métadonnées?

Je parle de métadonnées telles que les propriétés SVN, etc., qui n'affectent pas le contenu du fichier. Supposons que le fichier X possède une propriété supplémentaire dans la branche B par rapport au tronc T. Malheureusement, il apparaîtra dans 'svn diff T B' même si le contenu réel du fichier X est identique.

Je cherche quelque chose comme ça:

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

Mise à jour: J'ai partiellement résolu ce problème en affichant directement sur le système de fichiers au lieu d'utiliser les outils SVN. Voir ma propre réponse ci-dessous ...

Était-ce utile?

La solution 5

Il semble n'y avoir aucun moyen de le faire à l'aide des outils intégrés svn. Comment je l'ai résolu: Exportez les deux arbres et différez-les directement sur le système de fichiers en utilisant votre outil de diff préféré. C'est en quelque sorte le seul moyen d'y parvenir: /

Autres conseils

Vous pouvez faire passer la sortie svn diff par 'filterdiff --clean' pour supprimer toutes les lignes superflues, y compris les modifications de propriétés.

Si vous utilisez l'option - summary , les modifications de propriétés sont indiquées dans la deuxième colonne plutôt que dans la première colonne.

I.e.,

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

C’est un peu plus facile à grep. Je suppose que vous pourriez avoir un processus en deux étapes si vous voulez un diff complet - utilisez d'abord le résumé pour trouver les fichiers dont le contenu a été modifié, puis différez-les.

Beau conseil de JosephWatkins.

Voici la commande pour les utilisateurs de grep-junior:

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

Le grep recherche un espace comme deuxième caractère de la ligne.

Trouvé lors d'une recherche dans les documents d'aide svn

svn diff --patch-compatible

C'est la même chose que de courir

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

Voici une seule commande qui fait tout cela. Supposons que vous souhaitiez trouver tous les diffs (non propriétés) de tous les fichiers du répertoire en cours entre les révisions 54833 et 57215. Cette commande devrait le faire:

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

NB: seuls les fichiers modifiés sont modifiés, pas les fichiers ajoutés ou supprimés.

Utilisez svn diff --ignore-properties . C'est la méthode intégrée de Subversion qui permet uniquement de différencier le contenu. Il ignore les modifications apportées aux propriétés des éléments.

J'ai écrit un script à cette fin, je ne pouvais pas en trouver un en ligne.

Le script supprime les données en fonction d'un tableau d'expressions régulières entrées en haut du script. Actuellement, il est configuré pour filtrer les modifications de propriétés, mais il peut supprimer toutes les modifications correspondant à une série d'expressions régulières.

Dirigez simplement la sortie de svn diff vers le script, après avoir défini le script. Je mets les filtres dans le script à la place des paramètres car je lance toujours les mêmes filtres.

Je l'ai publié en tant que GPLv2.

clean_svn_diff.bash

Je ne suis pas sûr, mais un simple 'svn diff | grep -iv " trucs à ignorer " ' serait une solution de contournement.

Vous pouvez définir la propriété svn: ignore sur les fichiers et répertoires que vous voulez que svn diff ignore.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top