У меня есть файл, как показано ниже в репозитории 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
Ответы:
Если вы просто хотите старый файл в вашей рабочей копии:
Если вы хотите выполнить откат, посмотрите это « Как вернуться к более старой версии нашего кода в Subversion? ».
источник
svn cat тоже принимает ревизионный аргумент!
svn cat -r 175 mydir/myfile > mydir/myfile
источник
это должно вернуть один файл.
источник
Для одного файла вы можете сделать:
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
по некоторым причинам в качестве аргумента не используются несколько файлов. В этом случае, похоже, ничего не происходит (без сообщения об ошибке).Лучший способ:
Это отменит все файлы ревизии, чем просто вернет те файлы, которые вы не хотите отменить. Не забудьте dash (
-
) в качестве префикса для ревизии.Теперь передайте изменения обратно.
источник
Вы хотите сделать
svn merge -r [revision to revert from]:[revision to revert to] [path/filename]
Как только вы это сделаете, у вас будет эта ревизия файла в состоянии фиксации. Зафиксируйте файл.
источник
Я обнаружил, что это легко сделать с помощью
svn cat
команды, так что вам даже не нужно указывать ревизию.Это, вероятно, не будет выполнять роль данных inode (метаданных), таких как метки времени.
источник
Удивлен, никто не упомянул об этом
без определения номера ревизии вы могли бы написать это, если вы просто зафиксировали что-то, что хотите вернуть, это не сработает, если вы изменили какой-то другой файл и целевой файл не является последним измененным файлом
источник
svn merge -r HEAD:PREV file
такой, как сказал @Nick RussoЕсли это всего лишь пара файлов, и если вы используете Tortoise SVN, вы можете использовать следующий подход:
источник
Просто добавляю ответ @Mitch Dempsy, так как у меня пока недостаточно комментариев, чтобы комментировать.
При добавлении --force локальная копия будет перезаписана при экспорте, а затем вы можете выполнить фиксацию SVN, чтобы отправить ее в хранилище.
источник
Альтернативный вариант для одного файла - «заменить» текущую версию файла более старой версией:
Это имеет дополнительную особенность, что нежелательные изменения не отображаются в журнале для этого файла (то есть svn log file.ext).
источник
Если вы хотите откатить отдельный файл из определенной ревизии и выполнить коммит, выполните:
svn merge -c - [OldRev #] [Имя файла]
то есть.
svn merge -c -150 myfile.py
Обратите внимание на отрицательный номер ревизии
источник
источник