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

时间:2009-01-30 23:23:59

标签: svn version-control

这些说明有点令人生畏和困惑: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认为只是将其从源代码控制中删除,并在文件本身实际消失时吓坏了。所以一个子问题是,在没有实际删除本地副本的情况下,从版本控制中删除文件的正确方法是什么?

6 个答案:

答案 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:”按钮更改版本):

enter image description here

然后,您应该能够在Repo浏览器中的原始位置查看已删除的文件。右键单击它并选择“复制到工作副本...”:

enter image description here

然后,该文件将恢复到准备提交的工作副本(就像添加了svn一样)并且其日志历史记录保持不变。

答案 4 :(得分:2)

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

svn up -r341 [path_to_deletedFile]

答案 5 :(得分:1)

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