просмотр истории удаленного файла - PullRequest
153 голосов
/ 30 декабря 2008

Если я удаляю файл в Subversion, как я могу посмотреть его историю и содержимое? Если я пытаюсь сделать svn cat или svn log для несуществующего файла, он жалуется, что файл не существует.

Кроме того, если я хочу воскресить файл, я должен просто svn add вернуть его назад?

(Я спрашивал конкретно о Subversion, но я также хотел бы услышать о том, как Bazaar, Mercurial и Git также занимаются этим делом.)

Ответы [ 17 ]

4 голосов
/ 12 февраля 2009

Ах, так как я учусь пользоваться Базаром, я попробовал это. Без успеха, кажется, вы не можете записывать и комментировать удаленные файлы в настоящее время ...: - (

Пробовал:

> bzr log -r 3 Stuff/ErrorParser.hta
bzr: ERROR: Path does not have any revision history: Stuff/ErrorParser.hta

но с любопытством (и к счастью) я могу сделать:

> bzr cat -r 3 Stuff/ErrorParser.hta

и

> bzr diff -r 2..3 Stuff/ErrorParser.hta

и как указано в сообщении об ошибке выше:

> bzr log -v | grep -B 1 ErrorParser

(при необходимости настройте -B (--before-context)).

1 голос
/ 08 января 2013

Я сам хотел получить ответ. Попробуйте следующее, чтобы выводить только удаления из svn log.

svn log --stop-on-copy --verbose [--limit <limit>] <repo Url> | \
awk '{ if ($0 ~ /^r[0-9]+/) rev = $0 }
  { if ($0 ~ /^ D /) { if (rev != "") { print rev; rev = "" }; print $0 } }'

Фильтрует вывод журнала через awk . awk буферизует каждую найденную строку ревизии, выводя ее только при обнаружении удаляемой записи. Каждая ревизия выводится только один раз, поэтому несколько удалений в ревизии группируются (как при стандартном выводе svn log).

Вы можете указать --limit, чтобы уменьшить количество возвращаемых записей. При необходимости вы также можете удалить --stop-on-copy.

Я знаю, что есть жалобы на эффективность анализа всего журнала. Я думаю, что это лучшее решение, чем grep и его опция «бросить широкую сеть» -B. Я не знаю, является ли это более эффективным, но я не могу придумать альтернативу svn log. Это похоже на ответ @Alexander Amelkin, но не требует конкретного имени. Это также мой первый скрипт awk , так что он может быть нетрадиционным.

1 голос
/ 01 декабря 2010

Если вы хотите просмотреть историю файла до того, как он будет переименован, то, как указано в комментарии здесь , вы можете использовать

git log --follow -- current_file_name
1 голос
/ 30 декабря 2008

Вам необходимо указать ревизию.

svn log -r <revision> <deleted file>
0 голосов
/ 04 января 2017

Вы можете найти последнюю ревизию, которая предоставляет файл, используя двоичный поиск. Для этого я создал простой /bin/bash скрипт:

function svnFindLast(){
 # The URL of the file to be found
 local URL="$1"
 # The SVN revision number which the file appears in (any rev where the file DOES exist)
 local r="$2"
 local R
 for i in $(seq 1 "${#URL}")
  do
   echo "checkingURL:'${URL:0:$i}'" >&2
   R="$(svn info --show-item revision "${URL:0:$i}" 2>/dev/null)"
   echo "R=$R" >&2
   [ -z "$R" ] || break
 done
 [ "$R" ] || {
  echo "It seems '$URL' is not in a valid SVN repository!" >&2
  return -1
 }
 while [ "$r" -ne "$R" -a "$(($r + 1))" -ne "$R" ]
 do
  T="$(($(($R + $r)) / 2))"
  if svn log "${URL}@${T}" >/dev/null 2>&1
   then
    r="$T"
    echo "r=$r" >&2
   else
    R="$T"
    echo "R=$R" >&2
  fi
 done
 echo "$r"
}
0 голосов
/ 17 марта 2017

Предположим, что ваш файл был назван ~ / src / a / b / c / удаленный файл.

cd ~/src/a/b/c  # to the directory where you do the svn rm or svn mv command
#cd ~/src   # if you forget the correct directory, just to the root of repository
svn log -v | grep -w -B 9 deleted.file | head  # head show first 10 lines

образец вывода, нашел его в r90440

...
r90440 | user | 2017-02-03 11:55:09 +0800 (Fri, 03 Feb 2017) | 4 lines
Changed paths:
  M /src/a/b/c/foo
  M /src/a/b/c/bar
  D /src/a/b/c/deleted.file

скопировать обратно в предыдущую версию (90439 = 90440-1)

svn cp URL_of_deleted.file@90439 .
0 голосов
/ 26 марта 2015

Я написал php-скрипт, который копирует журнал svn всех моих репозиториев в базу данных mysql. Теперь я могу выполнять полнотекстовый поиск по моим комментариям или именам файлов.

...