这些说明有点令人生畏和困惑:http://svnbook.red-bean.com/en/1.0/ch04s04.html#svn-ch-4-sect-4.3.而且他们似乎并没有提到如果你在做完svn rm
"[1] 之后还没有办理登机手续就更简单了.
所以我认为这是一个很好的地方,为那些谷歌搜索记录一个更简单的答案.
[1]对于svn新手,可能会出现" svn rm
"立即销毁文件.我记得我svn rm
认为只是将它从源代码控制中删除,并在文件本身实际消失时吓坏了.所以一个子问题是,在没有实际删除本地副本的情况下,从版本控制中删除文件的正确方法是什么?
如果你刚刚做了
svn rm foo.txt
然后你可以简单地撤消它
svn revert foo.txt
如果您在执行" svn rm
"之后已经签入,那么您可以查看log(svn log
),找到文件存在的最后修订版本,并从该版本中获取它.
一种方法是合并具有该文件的旧版本.假设当前版本是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
无论出于何种原因,-r
arg不适合我(svn版本1.6.9).我在之前和之后尝试过src
,但不断收到一条消息,说明当前版本(duh)中找不到该文件.与--revision相同.使用@ style语法有效:
svn cp url/to/removed/foo.txt@4 foo.txt
要删除文件但将其保留在工作副本中,请使用
svn rm foo.txt --keep-local
要在提交删除后获取文件,可以使用merge命令或copy命令 - 两者都将保留文件历史记录.由于合并方式已在别处描述,这里是复制方式:
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"
对于TortoiseSVN用户,可以通过Repo浏览器轻松完成.在Repo Browser中,在删除文件之前切换到修订版(您可以使用右上角的"Revision:"按钮更改版本):
然后,您应该能够在Repo浏览器中的原始位置查看已删除的文件.右键单击它并选择"复制到工作副本...":
然后,该文件将恢复到准备提交的工作副本(就像添加了svn一样)并且其日志历史记录保持不变.