将SVN中的单个文件恢复到特定的修订版本

我有一个文件如下所示的SVN repo,我想恢复到以前的版本。在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
258692 次浏览

如果你只想要工作副本中的旧文件:

svn up -r 147 myfile.py

如果你想要回滚,请参阅这个“如何在subversion中返回到代码的旧版本?”。

对于单个文件,您可以这样做:

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

你可以执行svn revert <file>,但这只会恢复最后一个工作副本。

最好的方法是:

svn merge -c -RevisionToUndo ^/trunk

这将撤销修订的所有文件,而不是简单地恢复那些您不喜欢撤销的文件。不要忘记破折号(-)作为修订的前缀。

svn revert File1 File2

现在重新提交更改。

我发现通过svn cat命令来做到这一点很简单,这样你甚至不需要指定一个修订。

svn cat mydir/myfile > mydir/myfile

这可能不会回滚inode(元数据)数据,例如时间戳。

svn revert filename

这将恢复一个文件。

SVN cat也需要一个修订参数!

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

到目前为止,这里的所有答案似乎都有显著的缺点,都很复杂(需要找到回购URI),或者它们没有做问题可能要求的事情:如何让回购再次处于工作状态用旧版本的文件

在我看来,svn merge -r head:[revision-number-to-revert-to] [file-path]是最干净和最简单的方法。请注意,带回一个删除文件似乎不是这样工作的[1]。另请参见以下问题:是否有更好的方法恢复到文件的以前的SVN版本?

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

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

  1. 右键单击源文件,并选择“TortoiseSVN”->“显示日志”。
  2. 右键单击日志中的修订,并选择“Save revision to…”。
  3. 让旧版本覆盖当前文件。
  4. 提交被覆盖的源文件。

奇怪的是居然没人提到这一点

如果你没有找到修订号,你可以这样写,如果你刚刚提交了一些你想要恢复的东西,如果你改变了一些其他文件,而目标文件不是最后一个被改变的文件,这将不起作用

svn merge -r HEAD:PREV file

只是补充一下米奇·登普西的回答,因为我还没有足够的代表来评论。

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

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

你想做的是

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

一旦您这样做了,您将使文件的修订处于可提交状态。提交文件。

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

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

这增加了一个特性,即不需要的更改不会显示在该文件的日志中(即svn log file.ext)。

如果你想从一个特定的修订版本中回滚一个单独的文件并能够提交,那么执行:

svn merge -c -[OldRev#] [Filename]

ie。svn merge -c -150 myfile.py

请注意修订号的负面影响