Исходя из вашего вопроса, вы неявно квалифицируете свой запрос к удаленным файлам (потому что, предположительно, если он не будет удален, простой поиск в каталоге откроет его).Комментарий Ленивого Барсука заслуживает внимания: снятие квалификации без потери точности и, тем самым, упрощение команды.Я все за упрощение, но, учитывая любые проблемы, я также хотел бы рассмотреть возможность получить больше от решения при небольших дополнительных затратах.
Итак, начнем с предложенного вами решения:
svn log -v a/b/ | grep " D .*a/b/c.xml"
Iсначала добавлю опцию -q
, которая сокращает вывод, который вы все равно просто отбрасываете:
svn log -v -q a/b/ | grep " D .*a/b/c.xml"
А потом я бы хотел знать не просто , был ли такойфайл удален, но также , когда он был удален (т.е. в какой ревизии).Поскольку вы также неявно квалифицировали свою среду для Unix / Linux, вот решение с помощью awk (адаптировано из этой записи в блоге ):
svn log -q -v a/b/ | awk '
/^r[0-9]* \|/ { REVISION=$1; }
/ D/ { print REVISION": "$0; }
' | grep " D .*a/b/c.xml"
Это работает из-за формата svn log
выводится при использовании параметра –v
: он сообщает ревизию, после которой следуют все файлы в этой ревизии.Вот пример, показывающий, что файл Page.cs был удален в ревизии 10506:
r10506 | msorens | 2011-02-14 12:58:56 -0800 (Mon, 14 Feb 2011) | 1 line
Changed paths:
A /Projects/Test/Common
A /Projects/Test/Common/Setup.cs
A /Projects/Test/Common/Utility.cs
D /Projects/Test/Page.cs
Приведенные выше команды awk анализируют вывод в этом формате, извлекая номер ревизии из верхней строки, затем любые файлы, помеченные как удаленные («D» линии).Для Windows PowerShell обеспечивает ту же мощность и простоту использования, что и awk, с помощью оператора switch:
$( switch -Regex (svn log -q -v a/b) {
'^(r[0-9]*) \|' { $rev = $Matches[1] }
'^ D\s+(.*)' { "{0,-6} {1}" -f $rev, $Matches[1] }
} ) | Select-String "a/b/c.xml"
Но с TortoiseSVN есть более простой способ - просто откройте окно журнала в корнесвою рабочую копию и введите имя файла в поле поиска.Список ревизий сразу фильтруется по тому, что вы вводите.Если выводится более одной строки, последняя (самая верхняя) ревизия всегда будет той, где файл был удален.