将SVN中的单个文件恢复为特定版本

时间:2010-05-11 17:20:04

标签: svn revert

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

14 个答案:

答案 0 :(得分:175)

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

svn up -r 147 myfile.py

如果您想要回滚,请参阅“How to return to an older version of our code in subversion?”。

答案 1 :(得分:63)

svn cat也会进行修订!

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

答案 2 :(得分:55)

svn revert filename 

这应该还原一个文件。

答案 3 :(得分:50)

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

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

您可以执行svn revert <file>,但这只能恢复上一个工作副本。

答案 4 :(得分:18)

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

svn merge -r head:[revision-number-to-revert-to] [file-path]是IMO最干净,最简单的方法。请注意,恢复已删除的文件似乎不会以这种方式工作[1]。另请参阅以下问题:Better way to revert to a previous SVN revision of a file?

[1]如果您想要svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn up,请参阅What is the correct way to restore a deleted file from SVN?

答案 5 :(得分:13)

最好的方法是:

svn merge -c -RevisionToUndo ^/trunk

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

svn revert File1 File2

现在提交更改。

答案 6 :(得分:7)

我发现通过svn cat命令执行此操作非常简单,因此您甚至无需指定修订版。

svn cat mydir/myfile > mydir/myfile

这可能不会影响时间戳等inode(元数据)数据。

答案 7 :(得分:7)

你想做

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

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

答案 8 :(得分:4)

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

  1. 右键单击您的源文件,然后选择“TortoiseSVN” - &gt; “显示日志”。
  2. 右键单击日志中的修订,然后选择“将修订保存到...”。
  3. 让旧版本覆盖当前文件。
  4. 提交覆盖的源文件。

答案 9 :(得分:4)

加入@Mitch Dempsy答案,因为我还没有足够的回复评论。

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

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

答案 10 :(得分:2)

惊讶没有人提到这个

没有找到你可以编写的修订版号,如果你刚刚提交了你想要恢复的东西,如果你改变了一些其他文件并且目标文件不是最后一个更改的文件,这将无法工作

svn merge -r PREV:HEAD file

答案 11 :(得分:1)

如果您要回滚特定版本中的单个文件并能够提交,请执行以下操作:

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

即。 svn merge -c -150 myfile.py

请注意版本号上的否定

答案 12 :(得分:0)

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

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

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

答案 13 :(得分:0)

sudo svn revert filename
  

这是还原单个文件的更好方法