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