Существует ли фильтр исключения метаданных для команды SVN DIFF? - PullRequest
25 голосов
/ 31 декабря 2008

Я использую 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. Смотрите мой собственный ответ ниже ...

Ответы [ 10 ]

24 голосов
/ 04 октября 2009

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

11 голосов
/ 05 февраля 2009

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

т.е.,

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

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

6 голосов
/ 24 сентября 2013

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

svn diff --patch-compatible

Это то же самое, что и бег

svn diff --show-copies-as-adds --ignore-properties
6 голосов
/ 19 февраля 2009

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

Вот команда для grep-junior-users:

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

grep ищет пробел в качестве второго символа в строке.

4 голосов
/ 02 января 2009

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

2 голосов
/ 24 мая 2018

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

2 голосов
/ 05 октября 2010

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

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

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

1 голос
/ 04 июля 2009

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

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

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

Я выпустил его как GPLv2.

clean_svn_diff.bash

0 голосов
/ 31 декабря 2008

Вы можете установить свойство svn: ignore для файлов и каталогов, которые svn diff игнорирует.

0 голосов
/ 31 декабря 2008

Я не уверен, но простой 'svn diff | grep -iv "что игнорировать" - это обходной путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...