Есть ли фильтр исключения метаданных для команды SVN DIFF?
Я использую SVN в качестве системы управления версиями, и мне интересно, как сравнивать каталоги, игнорируя различия в метаданных. Есть ли способ сказать svn diff
сравнивать только фактическое содержимое и игнорировать любые метаданные?
Я имею в виду метаданные, такие как свойства SVN и т.д., которые не влияют на содержимое файла. Предположим, что файл X имеет дополнительное свойство в ветки B по сравнению с trunk T. К сожалению, он будет отображаться в 'svn diff T B', даже если фактическое содержимое файла X одинаково.
Я ищу что-то вроде этого:
svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-metadata --summarize
Обновление: Я частично решил это, если напрямую использовать файловую систему вместо использования инструментов SVN. См. Мой собственный ответ ниже...
Ответы
Ответ 1
Кажется, нет никакого способа сделать это, используя встроенные инструменты svn. Как я решил это:
Экспортируйте оба дерева и распределите их по файловой системе, используя ваш любимый инструмент diff. Это как-то единственный способ сделать это:/
Ответ 2
Вы можете передать выход svn diff через 'filterdiff --clean', чтобы удалить любые посторонние строки, включая изменения свойств.
Ответ 3
Если вы используете параметр --summarize
, изменения свойств указываются во втором, а не в первом столбце.
т.е.
M URL -- indicates content change
M URL -- property change
MM URL -- content and property change
Это немного легче grep. Я предполагаю, что у вас может быть двухэтапный процесс, если вы хотите, чтобы полное разграничение использовалось для поиска файлов с изменением содержимого, а затем их разграничение.
Ответ 4
Хороший совет от Джозефа Уоткинса.
Вот команда для пользователей grep-junior:
svn diff A B --summarize | grep '^. '
Grep ищет пробел как второй символ в строке.
Ответ 5
Обнаружено это при поиске через svn help docs
svn diff --patch-compatible
Это то же самое, что работает
svn diff --show-copies-as-adds --ignore-properties
Ответ 6
Вот одна команда, которая делает все это. Скажем, вы хотите найти все (не-свойства) diff для всех файлов в каталоге в настоящее время между версиями 54833 и 57215. Эта команда должна сделать это:
svn diff -r 54833:57215 --summarize | egrep -v '^ |^D|^A' | awk '{ print $2 }' | xargs svn diff -r 54833:57215
NB: он только различает измененные файлы - не добавленные или удаленные файлы.
Ответ 7
Я написал script, чтобы сделать это, после того как я не смог найти его в Интернете.
script удаляет данные на основе массива регулярных выражений, введенных в верхней части script. В настоящее время он настроен для фильтрации изменений свойств, но он может удалить любые изменения, которые соответствуют серии регулярных выражений.
Просто подключите вывод svn diff
к script после установки script. Я помещал фильтры в script вместо параметров, потому что я всегда запускаю те же фильтры.
Я выпустил его как GPLv2.
clean_svn_diff.bash
Ответ 8
Используйте svn diff --ignore-properties
. Это встроенный метод Subversion, чтобы делать различие только в контенте. Он игнорирует любые изменения свойств элементов.
Ответ 9
Я не уверен, но простой 'svn diff | grep -iv "stuff to ignore" "будет обходным путем.
Ответ 10
Вы можете установить свойство svn: ignore на файлы и каталоги, которые вы хотите игнорировать svn diff.