将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,则可以使用以下方法:
- 右键单击你的源文件,并select“TortoiseSVN” – >“显示日志”。
- 右键单击日志中的修订,然后select“将修订保存到…”。
- 让旧版本覆盖您的当前文件。
- 提交覆盖的源文件。
只是添加到@Mitch Dempsy答案,因为我没有足够的代表评论呢。
svn export -r <REV> svn://host/path/to/file/on/repos --force
添加–force将覆盖导出的本地副本,然后你可以做一个svn提交将其推送到存储库。