Подтвердить что ты не робот

Есть ли фильтр исключения метаданных для команды 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. См. Мой собственный ответ ниже...

4b9b3361

Ответ 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.