将SVN中的单个文件还原为特定的修订版本

我有一个文件,如下面的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 export -r <REV> svn://host/path/to/file/on/repos file.ext

你可以做svn revert <file>但这只会恢复最后的工作副本。

 svn revert filename 

这应该恢复一个单一的文件。

svn猫也要修改arg!

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

最好的方法是:

 svn merge -c -RevisionToUndo ^/trunk 

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

 svn revert File1 File2 

现在提交更改。

到目前为止,这里的所有答案似乎都有重大的缺点,是复杂的(需要findrepo URI),或者他们不会做可能要求的问题:如何使Repo再次处于工作状态,文件

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恢复已删除文件的方法?

我发现通过svn cat命令很简单,所以你甚至不需要指定修订版。

 svn cat mydir/myfile > mydir/myfile 

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

惊讶没有人提到这一点

没有find修订号你可以写这个,如果你只是提交了一些你想要恢复,这将无法正常工作,如果你改变了一些其他文件,目标文件不是最后一次更改的文件

 svn merge -r PREV:HEAD file 

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

  1. 右键单击你的源文件,并select“TortoiseSVN” – >“显示日志”。
  2. 右键单击日志中的修订,然后select“将修订保存到…”。
  3. 让旧版本覆盖您的当前文件。
  4. 提交覆盖的源文件。

只是添加到@Mitch Dempsy答案,因为我没有足够的代表评论呢。

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

添加–force将覆盖导出的本地副本,然后你可以做一个svn提交将其推送到存储库。