Существует ли фильтр исключения метаданных для команды SVN DIFF?
-
03-07-2019 - |
Вопрос
Я использую 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.
Я не уверен, но простой дифференциал | Греп -ив «вещи, чтобы игнорировать», будет обходным пути.
Вы можете установить СВН: игнорировать Свойство файлов и каталогов, которые вы хотите, чтобы svn diff игнорировал.