Existe-t-il un filtre d'exclusion de métadonnées pour la commande SVN DIFF?
-
03-07-2019 - |
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 ...
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.
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.