什么是在颠覆中取消删除文件的简单方法?

这些说明有点吓人和混乱: http : //svnbook.red-bean.com/en/1.0/ch04s04.html#svn-ch-4-sect-4.3 。 而且他们似乎也没有提到,如果你在执行“ svn rm ”之后还没有login,那么它就简单多了[1]。

所以我认为这将是一个很好的地方logging一个简单的答案,为这个谷歌search。

[1]对一个svn新手来说,“ svn rm ”可能会立即破坏文件。 我记得做svn rm认为只是从源代码pipe理中删除它,当文件本身实际上消失的时候,它会吓坏了。 所以一个子问题是,什么是从版本控制中删除文件而不实际删除本地副本的正确方法?

如果你刚刚做到了

 svn rm foo.txt 

那么你可以简单地撤消

 svn revert foo.txt 

如果您在执行“ svn rm ”之后已经签入,那么您可以查看日志( svn log ),find文件最后一个修订版本,然后从该版本抓取。

一种方法是在具有该文件的旧版本中合并。 假设当前版本是123,最后一个版本是120,那么这样做:

 svn merge -r123:120 

也许首先要做一个干预,以确保它不会做任何你不想要的事情:

 svn --dry-run merge -r123:120 

对于子问题,如何在不删除本地副本的情况下从svn中删除文件:

 svn rm foo.txt --keep-local 

或者,当然,您可以在svn rm'ing之前复制到临时文件,然后复制:

 cp foo.txt foo.txt-tmp svn rm foo.txt (svn ci -m "just removed foo.txt from the repository") cp foo.txt-tmp foo.txt 

不pipe什么原因, -r arg都不适合我(svn 1.6.9版本)。 我在src之前和之后尝试,但不断得到一个消息,该文件没有在当前版本(杜)中find。 和–revision一样。 使用@风格的语法虽然工作:

 svn cp url/to/removed/foo.txt@4 foo.txt 

要删除文件但保留在工作副本中,请使用

 svn rm foo.txt --keep-local 

要在提交删除文件后重新获取文件,可以使用merge命令或copy命令 – 两者都将保留文件历史logging。 由于合并方式已经在其他地方描述过了,所以复制方式如下:

 svn rm foo.txt svn ci foo.txt -m "removed file" (now at r5 as an example) svn cp url/to/removed/foo.txt -r4 foo.txt svn ci foo.txt -m "got file back" 

我使用了以前修订版中使用乌龟的复制菜单项,为我工作并保留了历史。

在SVN中还原已删除的文件。 在删除之前查找修订号(比如说341)。 然后将该文件单独还原为该修订版本号。

 svn up -r341 [path_to_deletedFile]