这些说明有点令人生畏和困惑: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
认为只是将其从源代码控制中删除,并在文件本身实际消失时吓坏了。所以一个子问题是,在没有实际删除本地副本的情况下,从版本控制中删除文件的正确方法是什么?
答案 0 :(得分:83)
如果你刚刚做了
svn rm foo.txt
然后你可以用
撤消它svn revert foo.txt
如果您在执行“svn rm
”之后已经签入,那么您可以查看日志(svn log
),找到文件存在的最后修订版本,然后从该版本中获取。< / p>
这样做的一种方法是合并具有该文件的旧版本。假设当前版本是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
答案 1 :(得分:41)
无论出于何种原因,-r
arg对我不起作用(svn版本1.6.9)。我在src
之前和之后尝试过,但一直收到一条消息,说明当前版本(duh)中找不到该文件。与--revision相同。尽管使用了@ style语法:
svn cp url/to/removed/foo.txt@4 foo.txt
答案 2 :(得分:31)
要删除文件但将其保留在工作副本中,请使用
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"
答案 3 :(得分:5)
对于TortoiseSVN用户,可以通过Repo浏览器轻松完成。在Repo Browser中,在删除文件之前切换到修订版(您可以使用右上角的“Revision:”按钮更改版本):
然后,您应该能够在Repo浏览器中的原始位置查看已删除的文件。右键单击它并选择“复制到工作副本...”:
然后,该文件将恢复到准备提交的工作副本(就像添加了svn一样)并且其日志历史记录保持不变。
答案 4 :(得分:2)
在SVN中还原已删除的文件。在删除之前找到修订号(比如341)。然后将该文件单独还原到该修订号。
svn up -r341 [path_to_deletedFile]
答案 5 :(得分:1)
我使用了乌龟之前版本的复制菜单项,为我工作并保留了历史。