什么是在颠覆中取消删除文件的简单方法?
这些说明有点吓人和混乱: 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]