У меня есть файл, как показано ниже в репозитории 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
Если вам нужен старый файл в вашей рабочей копии:
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>, но это восстановит только последнюю рабочую копию.
svn revert <file>
Пока что все ответы здесь имеют существенные недостатки, сложны (необходимо найти URI репо) или не выполняют то, о чем, вероятно, задавался вопрос: Как вернуть репо в рабочее состояние с этой старой версией файла .
svn merge -r head:[revision-number-to-revert-to] [file-path] - ИМО самый чистый и простой способ сделать это. Обратите внимание, что восстановление удаленного файла, похоже, не работает таким образом [1]. См. Также следующий вопрос: Лучший способ вернуться к предыдущей версии SVN файла?
svn merge -r head:[revision-number-to-revert-to] [file-path]
[1] Для этого вы хотите svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn up, см. Также Как правильно восстановить удаленный файл из SVN?
svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn up
Лучший способ:
svn merge -c -RevisionToUndo ^/trunk
Это отменит все файлы ревизии, чем просто вернет те файлы, которые вы не хотите отменять. Не забывайте черту (-) в качестве префикса для ревизии.
-
svn revert File1 File2
Теперь передайте изменения обратно.
Вы хотите сделать
svn merge -r [revision to revert from]:[revision to revert to] [path/filename]
Как только вы это сделаете, у вас будет ревизия файла в состоянии фиксации. Зафиксируйте файл.
Я обнаружил, что это легко сделать с помощью команды svn cat, так что вам даже не нужно указывать ревизию.
svn cat
svn cat mydir/myfile > mydir/myfile
Это, вероятно, не будет выполнять роль данных inode (метаданных), таких как метки времени.
Просто добавляю ответ @Mitch Dempsy, так как у меня пока недостаточно комментариев, чтобы комментировать.
svn export -r <REV> svn://host/path/to/file/on/repos --force
При добавлении --force локальная копия будет перезаписана при экспорте, а затем вы сможете выполнить svn commit, чтобы отправить ее в репозиторий.
Если это только пара файлов, и если вы используете Tortoise SVN, вы можете использовать следующий подход: