6

我使用 SmartSVN 作为 Subversion 的前端。有时,受存储库控制的源文件会变得多余——我根本不再需要它。在这种情况下,我想删除它,因为更新工作副本不再从存储库中获取文件。但我仍然希望文件的历史记录(即先前提交的修订)保留在存储库中。

如果我没记错的话,SmartSVN 的Remove命令会删除文件的历史记录(我显然不愿意验证这一点)。如果我错了,请纠正我。否则:我怎样才能达到预期的效果?

编辑:使用虚拟文件,确认Remove完全从 SVN 控件中删除文件,并且其历史记录不再可见。所以问题是真实的。

4

3 回答 3

5

Subversion 永远不会从存储库中完全删除文件。事实上,这是一个很好的功能。

您执行svn deleteor svn rm,文件不再在工作副本中。但是,它肯定还在。可能使您确信该文件已被永久删除的是您正在执行以下操作:

 $ svn co http://repo/svn/project
 [...]
 $ cd project
 $ svn del foo.txt
 $ svn commit -m "Removed foo.txt"
 committed version 12345
 $ svn ls http://repo/svn/project/foo.txt
 No such file

这是真实的。文件foo.txt不再位于 Subversion 的最新版本中。

也许你做了这样的事情:

您知道该文件不在修订版 12345 中,因为您删除了它。但是,让我们看看修订版 12344。该文件应该仍然存在于那个修订版中:

 $ svn ls -r12344 http://repo/svn/project/foo.txt
 No such file

你看,12344版本里没有revision,所以已经永久删除了。

没那么快,邦基。您请求的是存储库布局的当前修订版中文件的修订版 12344。您需要做的是了解文件修订版和存储库修订版之间的区别。这被称为修订挂钩,并且可能是 Subversion 中比较困难的概念之一。

您要查看的是 REPOSITORY 第 12,344 修订版中的文件。为此,您@在存储库 URL 的末尾放置一个:

 $ svn ls http://repo/svn/project/foo.txt@12344
 foo.txt

现在,我们可以看到该文件,因为它位于该存储库布局的第 12,344 版中。如果您需要取消删除文件,您始终可以从存储库布局的挂钩修订版中复制所需文件的修订版:

 $ svn cp -r12344 -m"undeleting foo.txt" \
       http://repo/svn/project/foo.txt@12344 \
       http://repo/svn/project

这会将存储库第 12,344 修订版的文件的修订版 12344 复制foo.txt到存储库的当前修订版。

查找已删除文件的最简单方法是查看svn log

 $ svn log -rHEAD -v http://repo/svn/project/foo.txt
 r12345 | dweintraub | [...]

 Removed foo.txt

 D  /project/foo.txt
 -----------------------------------------------------

我在修订版 12345 中删除了文件 `foo.txt。因此,它仍然存在于修订版 12344 中。很高兴知道我是否需要取消删除该文件。

是的,在这种情况下,我必须请求修改文件和 Subversion 布局可能看起来很愚蠢,因为它们都是相同的。但是,情况并非总是如此。文件被移动和复制、删除和取消删除。我想要的文件版本可能与我正在寻找的存储库版本不同。

于 2012-11-13T00:46:15.993 回答
1

在 SmartSVN 中:

选择文件/文件夹->右键单击->“在存储库浏览器中打开”->右键单击要删除的文件/文件夹->“删除...”

于 2015-04-27T13:26:02.597 回答
0

我接受了 David W. 的回答——它从 Subversion 的角度正确地描述了事物的状态(基于命令行)。由于我使用 SmartSVN 作为 GUI 前端,我想从这个角度添加适当的信息。

要使用 SmartSVN 查看已删除文件的历史记录,

  • 打开存储库浏览器(与项目窗口相反)
  • 发出Repository | Show Revision命令
  • 选择Revision单选按钮;然后点击Select按钮
  • 选择要查看的存储库修订

然后,您将看到该文件,前提是它存在于您选择的存储库版本中。

请注意,所选文件夹决定了显示哪些文件(似乎没有办法像在项目窗口中那样显示所有文件),以及显示哪些存储库修订版以供选择。

于 2012-11-13T16:47:36.877 回答