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

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

Что вы имеете в виду под метаданными?

codelogic 31.12.2008 11:32

"Свойства SVN" - лучшее слово для описания этого. Я исправил свой пост, чтобы прояснить это ..

driAn 31.12.2008 13:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
25
2
14 693
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

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

Вся разница состоит только из огромного количества текста, мне пришлось бы вручную проанализировать его, чтобы отфильтровать все изменения, подобные «svn property added». К сожалению, с помощью grep я не могу выполнить простую задачу.

driAn 02.01.2009 20:06

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

Я не хочу игнорировать определенные каталоги или файлы, это касается игнорирования различных свойств (также называемых метаданными) одних и тех же файлов. Предположим, что файл X имеет дополнительное свойство в ветви B по сравнению с стволом T. Он будет отображаться в svn diff, даже если фактическое содержимое такое же.

driAn 31.12.2008 12:56
Ответ принят как подходящий

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

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

Т.е.,

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

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

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

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

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

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

Простите. Это должно быть svn diff A B --summarize | grep -v '^' Все строки, начинающиеся с пробела, должны быть скрыты, потому что там, где изменяются только свойства файлов.

Michael Augustin 20.02.2009 00:55

Это не касается случаев, когда оба свойства а также содержимого файла изменяются или когда с файлом произошло что-то еще, например блокировка, и файл был изменен.

trysis 28.12.2017 23:30

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

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

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

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

clean_svn_diff.bash

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

Работает как рекламируется - отлично! Подсказка для пользователей Debian / Ubuntu: если filterdiff отсутствует в вашей системе, вы можете установить его через apt-get install patchutils.

ax. 18.07.2012 20:02

Более новые версии svn (проверенные на 1.9.3) предоставляют встроенный способ сделать это: stackoverflow.com/a/50515644/5749914 или stackoverflow.com/a/18984711/5749914.

Warlike Chimpanzee 24.03.2019 23:12

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

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

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

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

svn diff --patch-compatible

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

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

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

Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением. - Из обзора

Ravi Y 25.05.2018 00:31

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

seanahern 29.05.2018 19:12

@ryadavilli, почему рецензенты stackoverflow такие тупые?

Warlike Chimpanzee 02.05.2019 19:12

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