Существует ли фильтр исключения метаданных для команды SVN DIFF?

StackOverflow https://stackoverflow.com/questions/402522

Вопрос

Я использую SVN в качестве системы контроля версий, и мне интересно, как сравнивать каталоги, игнорируя любые различия в метаданных.Есть ли способ сказать svn diff сравнивать только фактический контент и игнорировать любые метаданные?

Я имею в виду метаданные, такие как свойства SVN и т. д.это не влияет на содержимое файла.Предположим, что файл X имеет дополнительное свойство в ветке B по сравнению со стволом T.К сожалению, он будет отображаться в «svn diff T B», хотя фактическое содержимое файла X такое же.

Я ищу что-то вроде этого:

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

Обновлять: Я частично решил эту проблему, выполняя различия непосредственно в файловой системе вместо использования инструментов SVN.Смотрите мой собственный ответ ниже...

Это было полезно?

Решение 5

Кажется, нет способа сделать это с помощью встроенных инструментов svn.Как я это решил:Экспортируйте оба дерева и сравните их напрямую в файловой системе, используя ваш любимый инструмент сравнения.В каком-то смысле это единственный способ сделать это :/

Другие советы

Вы можете передать выходные данные svn diff через filterdiff --clean, чтобы удалить любые посторонние строки, включая изменения свойств.

Если вы используете --summarize вариант, то изменения свойств отображаются во втором, а не в первом столбце.

Т.е.,

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

Немного проще использовать grep.Я думаю, если вам нужен полный анализ различий, вы могли бы использовать двухэтапный процесс: сначала используйте суммирование, чтобы найти файлы с измененным содержимым, а затем сравните их.

Хороший совет от Джозефа Уоткинса.

Вот команда для пользователей grep-junior:

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

Команда grep ищет пробел как второй символ в строке.

Нашел это при поиске в справочной документации svn.

svn diff --patch-compatible

Это то же самое, что бежать

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

Вот одна команда, которая делает все это.Допустим, вы хотите найти все (не связанные с собственностью) различия для всех файлов в текущем каталоге между ревизиями 54833 и 57215.Эта команда должна сделать это:

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

Примечание:Он различает только измененные файлы, а не добавленные или удаленные файлы.

Использовать svn diff --ignore-properties.Это встроенный метод Subversion, позволяющий различать только содержимое.Он игнорирует любые изменения свойств элементов.

Я написал сценарий для этого, после того как не смог найти его в Интернете.

Скрипт удаляет данные на основе массива регулярных выражений, введенных в верхней части скрипта.В настоящее время он настроен на фильтрацию изменений свойств, но может удалять любые изменения, соответствующие серии регулярных выражений.

Просто перенаправьте вывод svn diff в сценарий после того, как вы установили сценарий.Я помещаю фильтры в скрипт вместо параметров, потому что всегда запускаю одни и те же фильтры.

Я выпустил его под лицензией GPLv2.

clean_svn_diff.bash

Я не уверен, но простой дифференциал | Греп -ив «вещи, чтобы игнорировать», будет обходным пути.

Вы можете установить СВН: игнорировать Свойство файлов и каталогов, которые вы хотите, чтобы svn diff игнорировал.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top