Возврат одного файла в SVN к определенной ревизии

У меня есть файл, как показано ниже в SVN-репо, который я хотел бы вернуть к предыдущей версии. Каков способ сделать это в SVN? Я хочу только понизить этот конкретный файл до более старой версии, а не всего репо.

Спасибо.

$ svn log myfile.py
----------------------
r179 | xx | 2010-05-10

Change 3
----------------------
r175 | xx | 2010-05-08

Change 2
----------------------
r174 | xx | 2010-05-04

Initial

Ответ 2

svn cat также принимает аргумент ревизии!

svn cat -r 175 mydir/myfile > mydir/myfile

Ответ 3

svn revert filename 

это должно вернуть один файл.

Ответ 4

Для одного файла вы можете сделать:

svn export -r <REV> svn://host/path/to/file/on/repos file.ext

Вы можете сделать svn revert <file>, но это восстановит только последнюю рабочую копию.

Ответ 5

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

svn merge -r head:[revision-number-to-revert-to] [file-path] - это ИМО самый чистый и самый простой способ сделать это. Обратите внимание, что возврат удаленного файла не работает таким образом [1]. См. Также следующий вопрос: Лучший способ вернуться к предыдущей версии SVN файла?

[1] Для этого вы хотите svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn up, см. также Каков правильный способ восстановления удаленного файла из SVN?

Ответ 6

Лучший способ:

svn merge -c -RevisionToUndo ^/trunk

Это приведет к отмене всех файлов ревизии, чем просто отменить тот файл, который вы не хотите отменять. Не забывайте тире (-) в качестве префикса для ревизии.

svn revert File1 File2

Теперь верните изменения.

Ответ 7

Мне было легко сделать это с помощью команды svn cat, так что вам даже не нужно указывать ревизию.

svn cat mydir/myfile > mydir/myfile

Это, вероятно, не будет возвращать данные inode (метаданные), такие как временные метки.

Ответ 8

Ты хочешь сделать

svn merge -r [revision to revert from]:[revision to revert to] [path/filename]

Как только вы это сделаете, у вас будет эта ревизия файла в состоянии фиксации. Зафиксируйте файл.

Ответ 9

Если это всего лишь несколько файлов, и если вы используете Tortoise SVN, вы можете использовать следующий подход:

  • Щелкните правой кнопкой мыши на исходном файле и выберите "TortoiseSVN" → "Показать журнал".
  • Щелкните правой кнопкой мыши на ревизии в журнале и выберите "Сохранить ревизию в...".
  • Пусть старая версия перезапишет ваш текущий файл.
  • Зафиксировать перезаписанный исходный файл.

Ответ 10

Просто добавив в @Mitch Dempsy ответ, так как у меня пока нет комментариев.

svn export -r <REV> svn://host/path/to/file/on/repos --force

Добавление -force будет перезаписывать локальную копию с помощью экспорта, а затем вы можете сделать svn commit, чтобы нажать его в репозиторий.

Ответ 11

Удивлен, никто не упомянул об этом

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

svn merge -r HEAD:PREV file

Ответ 12

Если вы хотите откатить отдельный файл из определенной ревизии и выполнить коммит, то выполните:

svn merge -c - [OldRev #] [Имя файла]

то есть. svn merge -c -150 myfile.py

Обратите внимание на отрицательный номер ревизии

Ответ 13

Альтернативный вариант для одного файла - "заменить" текущую версию файла более старой версией:

svn rm file.ext
svn cp svn://host/path/to/file/on/repo/[email protected]<REV> file.ext
svn ci

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

Ответ 14

sudo svn revert filename

это лучший способ вернуть один файл