198

我在 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
4

13 回答 13

188

如果您只想在工作副本中使用旧文件:

svn up -r 147 myfile.py

如果你想回滚,请看这篇“如何在 subversion 中返回我们代码的旧版本? ”。

于 2010-05-11T17:25:46.630 回答
89

svn cat 也需要一个修订版 arg!

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

于 2015-02-24T15:35:34.623 回答
57
svn revert filename 

这应该恢复单个文件。

于 2014-03-16T01:22:01.220 回答
50

对于单个文件,您可以执行以下操作:

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

您可以这样做svn revert <file>,但这只会恢复最后一个工作副本。

于 2010-05-11T17:26:07.567 回答
25

到目前为止,这里的所有答案似乎都有很大的缺点,很复杂(需要找到 repo URI),或者他们没有做问题可能要求的事情:如何使用旧版本的文件.

svn merge -r head:[revision-number-to-revert-to] [file-path]IMO 是最干净、最简单的方法吗?请注意,以这种方式恢复已删除的文件似乎不起作用[1]。另请参阅以下问题:更好的方式恢复到文件的先前 SVN 版本?

[1] 对于您想要svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn up的,另请参阅从 SVN 恢复已删除文件的正确方法是什么?

于 2015-11-12T02:01:26.887 回答
13

最好的方法是:

svn merge -c -RevisionToUndo ^/trunk

这将撤消修订的所有文件,而不是简单地还原那些您不想撤消的文件。不要忘记破折号 ( -) 作为修订的前缀。

svn revert File1 File2

现在提交更改。

于 2010-05-11T17:31:47.613 回答
10

你想做

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

一旦你这样做了,你就会使该文件的修订处于可提交状态。提交文件。

于 2018-02-19T21:57:28.800 回答
8

很惊讶没有人提到这个

如果不知道修订号,你可以写这个,如果你只是提交了一些你想恢复的东西,如果你改变了一些其他文件并且目标文件不是最后一个改变的文件,这将不起作用

svn merge -r HEAD:PREV file
于 2017-02-21T03:16:30.603 回答
7

我发现通过svn cat命令执行此操作很简单,因此您甚至不必指定修订版。

svn cat mydir/myfile > mydir/myfile

这可能不会影响索引节点(元数据)数据,例如时间戳。

于 2013-08-27T22:40:44.427 回答
5

如果只有几个文件,并且您使用的是 Tortoise SVN,则可以使用以下方法:

  1. 右键单击您的源文件,然后选择“TortoiseSVN”->“显示日志”。
  2. 右键单击日志中的修订,然后选择“将修订保存到...”。
  3. 让旧版本覆盖您当前的文件。
  4. 提交被覆盖的源文件。
于 2015-11-19T11:41:44.430 回答
4

只需添加@Mitch Dempsy 的答案,因为我还没有足够的代表发表评论。

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

添加 --force 将使用导出覆盖本地副本,然后您可以执行 svn commit 将其推送到存储库。

于 2017-04-20T02:19:28.303 回答
2

单个文件的另一种选择是用旧版本“替换”文件的当前版本:

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

这有一个附加功能,不需要的更改不会显示在此文件的日志中(即 svn log file.ext)。

于 2018-07-13T23:55:07.857 回答
1

如果您想从特定修订回滚单个文件并能够提交,请执行以下操作:

svn merge -c -[OldRev#] [文件名]

IE。svn merge -c -150 myfile.py

注意修订号的负数

于 2018-08-01T13:55:57.450 回答