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

dre*_*ves 71 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认为只是将它从源代码控制中删除,并在文件本身实际消失时吓坏了.所以一个子问题是,在没有实际删除本地副本的情况下,从版本控制中删除文件的正确方法是什么?

dre*_*ves 84

如果你刚刚做了

svn rm foo.txt
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地撤消它

svn revert foo.txt
Run Code Online (Sandbox Code Playgroud)

如果您在执行" svn rm"之后已经签入,那么您可以查看log(svn log),找到文件存在的最后修订版本,并从该版本中获取它.

一种方法是合并具有该文件的旧版本.假设当前版本是123并且该文件的最后一个版本是120,那么执行以下操作:

svn merge -r123:120
Run Code Online (Sandbox Code Playgroud)

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

svn --dry-run merge -r123:120
Run Code Online (Sandbox Code Playgroud)

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

svn rm foo.txt --keep-local
Run Code Online (Sandbox Code Playgroud)

或者,当然,您可以在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
Run Code Online (Sandbox Code Playgroud)


Mic*_*ush 41

无论出于何种原因,-rarg不适合我(svn版本1.6.9).我在之前和之后尝试过src,但不断收到一条消息,说明当前版本(duh)中找不到该文件.与--revision相同.使用@ style语法有效:

svn cp url/to/removed/foo.txt@4 foo.txt
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一对我有用的命令.SVN 1.6.15 (2认同)
  • 如果您不想担心找到存储库的*实际 URL*,您可以使用 `^/path/from/repo/root` 来代替。例如,在我的例子中,我使用“^/trunk/path/to/my/file.js”来恢复最初位于工作副本中“path/to/my/file.js”的文件(其中是“^/trunk”)。 (2认同)

Ste*_*fan 31

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

svn rm foo.txt --keep-local
Run Code Online (Sandbox Code Playgroud)

要在提交删除后获取文件,可以使用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"
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,复制命令必须有点不同:svn cp url /to/removed/foo.txt@4 -r4 foo.txt ----没有@ 4我得到"找不到路径"错误 (7认同)

atk*_*ins 5

对于TortoiseSVN用户,可以通过Repo浏览器轻松完成.在Repo Browser中,在删除文件之前切换到修订版(您可以使用右上角的"Revision:"按钮更改版本):

在此输入图像描述

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

在此输入图像描述

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