Возврат отдельного файла в 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

13 ответов

Если вам просто нужен старый файл в вашей рабочей копии:

svn up -r 147 myfile.py

Если вы хотите выполнить откат, посмотрите это " Как вернуться к более старой версии нашего кода в Subversion?".

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

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

svn revert filename 

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

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

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

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

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

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?

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

svn merge -c -RevisionToUndo ^/trunk

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

svn revert File1 File2

Теперь внесите изменения обратно.

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

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

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

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

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

svn merge -r PREV:HEAD file

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

svn cat mydir/myfile > mydir/myfile

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

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

  1. Щелкните правой кнопкой мыши по исходному файлу и выберите "TortoiseSVN" -> "Показать журнал".
  2. Щелкните правой кнопкой мыши ревизию в журнале и выберите "Сохранить ревизию в...".
  3. Позвольте старой ревизии перезаписать ваш текущий файл.
  4. Зафиксируйте перезаписанный исходный файл.

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

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

При добавлении --force локальная копия будет перезаписана при экспорте, а затем вы можете выполнить фиксацию SVN, чтобы отправить ее в хранилище.

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

svn rm file.ext
svn cp svn://host/path/to/file/on/repo/file.ext@<REV> file.ext
svn ci

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

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

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

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

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

sudo svn revert filename

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

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