SVN: Как узнать, в какой ревизии был удален файл? - PullRequest
23 голосов
/ 21 июля 2011

Учитывая, что я использую командную строку svn в Windows, как найти номер ревизии, в которой был удален файл?В Windows нет таких причудливых вещей, как grep, и я пытаюсь использовать только командную строку, без TortoiseSVN.Заранее спасибо!

РЕДАКТИРОВАТЬ:

Ответы [ 3 ]

17 голосов
/ 02 марта 2015

Установите Cygwin.

Я использую это:

svn log -v --limit <nr> -v | grep -E '<fileName>|^r' | grep -B 1 <fileName>

где

fileName - the name of the file or any pattern which matches it
nr - the number of latest revisions in which I want to look for

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

(Очевидно, --limit является необязательным, однако у вас обычно есть представление о том, насколько глубоковам нужно искать, что приносит вам некоторую производительность.)

9 голосов
/ 21 июля 2011

Журнал это место для поиска. Я знаю, что вы не хотите слышать этот ответ, но именно здесь вам нужно искать удаленные файлы в SVN.

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

Самый простой способ справиться с этой проблемой, который я знаю, - это отойти от командной строки и использовать инструмент с графическим интерфейсом, например TortoiseSVN .

TortoiseSVN связывает себя со стандартным проводником Windows, поэтому его очень легко использовать. В контексте ответа на этот вопрос вы все равно будете использовать его для просмотра журналов, но это будет гораздо более быстрое упражнение:

Найдите папку SVN, которую вы хотите просмотреть. Затем щелкните правой кнопкой мыши значок папки и выберите TortoiseSVN -> Просмотреть журналы из контекстного меню.

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

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

Я знаю, что вы спрашиваете о командной строке, но для таких административных задач браузер с графическим интерфейсом действительно имеет смысл. Это позволяет намного быстрее увидеть, что происходит, по сравнению с попыткой прочитать страницы загадочного текста (независимо от того, насколько хорошо вы разбираетесь в чтении этого текста).

2 голосов
/ 08 февраля 2018

Этот вопрос был опубликован и ответил некоторое время назад. В этом ответе я постараюсь показать гибкий способ получения запрашиваемой информации и ее расширения.

В cygwin используйте svn log в сочетании с awk

REPO_URL=https://<hostname>/path/to/repo
FILENAME=/path/to/file

svn log ${REPO_URL} -v --search "${FILENAME}" | \
    awk -v var="^   [D] ${FILENAME}$" \
    '/^r[0-9]+/{rev=$1}; \
    $0 ~ var {print rev $0}'
  • svn log ${REPO_URL} -v --search "${FILENAME}" запрашивает у svn log подробный журнал, содержащий $ {FILENAME}. Это уменьшает передачу данных.
  • Результат передан в awk. awk получает ${FILENAME}, переданный через -v в переменной var вместе с шаблоном поиска var="^ [D] ${FILENAME}$"
  • В программе awk /^r[0-9]+/ {rev=$1} присваивает номер редакции rev, если строка соответствует /^r[0-9]+/.
  • Для каждой соответствующей строки ^ [D] ${FILENAME}$ awk печатает сохраненный номер редакции rev и строку: $0 ~ var {print rev $0}

, если вы заинтересованы не только в удалении файла, но также в создании, изменении, замене, измените D в var="^ [D] ${FILENAME}$" на DAMR.

Следующее даст вам все изменения:

svn log ${REPO_URL} -v --search "${FILENAME}" | \
    awk -v var="^   [DAMR] ${FILENAME}$" \
    '/^r[0-9]+/ {rev=$1}; \
    $0 ~ var {print rev $0}'

А если вас интересуют имя пользователя, дата и время:

svn log ${REPO_URL} -v --search "${FILENAME}" | \
    awk -v var="^   [DAMR] ${FILENAME}$" \
    '/^r[0-9]+/ {rev=$1;user=$3;date=$5;time=$6}; \
    $0 ~ var {print rev " | " user " | " date " | " time " | " $0}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...