我有一个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
如果要回滚,请参阅此“How to return to an older version of our code in subversion?”。
只是添加@Mitch Dempsy答案,因为我还没有足够的回复评论。
svn export -r <REV> svn://host/path/to/file/on/repos --force
添加--force将使用导出覆盖本地副本,然后您可以执行svn提交将其推送到存储库。
惊讶没有人提到这个
没有找到你可以编写的修订版号,如果你刚提交了你要恢复的东西,如果你改变了一些其他文件并且目标文件不是最后一个更改的文件,这将不起作用
svn merge -r HEAD:PREV file
单个文件的备用选项是使用旧版本“替换”当前版本的文件:
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]
府。 Ku zxsw指出
请注意修订号的否定
svn merge -c -150 myfile.py
这是还原单个文件的更好方法
svn cat也需要修改arg!
svn cat -r 175 mydir/myfile > mydir/myfile
svn revert filename
这应该还原一个文件。
对于单个文件,您可以执行以下操作:
svn export -r <REV> svn://host/path/to/file/on/repos file.ext
你可以做svn revert <file>
,但这只会恢复最后一份工作副本。
到目前为止,这里的所有答案似乎都有明显的缺点,很复杂(需要找到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?
最好的方法是:
svn merge -c -RevisionToUndo ^/trunk
这将撤消修订的所有文件,而不是简单地还原那些您不想撤消的文件。不要忘记破折号(-
)作为修订的前缀。
svn revert File1 File2
现在提交更改。
我发现通过svn cat
命令执行此操作非常简单,因此您甚至不必指定修订版。
svn cat mydir/myfile > mydir/myfile
这可能不会影响时间戳等inode(元数据)数据。
你想做
svn merge -r [revision to revert from]:[revision to revert to] [path/filename]
一旦这样做,您将使该文件的修订版处于可提交状态。提交文件。
如果它只是几个文件,并且如果您使用的是Tortoise SVN,则可以使用以下方法: