Возврат отдельного файла в SVN к определенной ревизии - PullRequest
170 голосов
/ 11 мая 2010

У меня есть файл, как показано ниже в репозитории 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

Ответы [ 14 ]

178 голосов
/ 11 мая 2010

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

svn up -r 147 myfile.py

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

65 голосов
/ 24 февраля 2015

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

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

54 голосов
/ 16 марта 2014
svn revert filename 

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

50 голосов
/ 11 мая 2010

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

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

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

19 голосов
/ 12 ноября 2015

Пока что все ответы здесь имеют существенные недостатки, сложны (необходимо найти 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?

13 голосов
/ 11 мая 2010

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

svn merge -c -RevisionToUndo ^/trunk

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

svn revert File1 File2

Теперь передайте изменения обратно.

7 голосов
/ 20 февраля 2018

Вы хотите сделать

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

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

7 голосов
/ 28 августа 2013

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

svn cat mydir/myfile > mydir/myfile

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

4 голосов
/ 20 апреля 2017

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

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

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

4 голосов
/ 19 ноября 2015

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

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