如何防止SVN恢复已删除的文件

15

我在一个开发团队中工作,我们的代码并没有明确定义的分离。因此,当我花费大约一周的时间工作后,我需要在提交我的更改之前进行更新。但是当我这样做时,所有已删除的文件都会被恢复。我知道有SVN删除操作,但是对于每个删除的文件或目录都这样做非常烦人。

有什么技巧可以防止这种情况发生吗?


我不知道没有分离代码意味着什么,但如果有人正在检入他们不应该检入的文件,那么 SVN 删除它们并告诉他们停止检入是长期解决方案。 - Edwin Buck
我认为“没有分离的代码”意味着一堆不相关的代码混杂在一个目录中,以至于Michal只需要整个混乱目录中的几个文件,所以他删除了那些其他文件。但是当他更新工作副本时,它们自然会重新出现。 - Ben
没有分离的代码意味着所有开发人员都会修改整个代码。这意味着没有包,其他团队成员也无法受限访问。因此,在我提交某些文件之前,我正在使用的目录可能已经过时了。 - Michal Krasny
5个回答

9
所以,这不是基本上一个新的答案,但是现有的答案似乎都不能完全解决你的问题(而我经常遇到这个问题)。
以下是我的方法:如果你删除了文件并且不希望在必要更新期间将它们恢复:
  1. 使用TortoiseSVN功能“检查修改”
  2. 按状态对列表排序
  3. 选择所有状态为“missing”的文件
  4. 右键单击,然后删除
当然,这是“SVN删除”,但是这样你就不必在实际删除文件时执行它,并且可以批量标记它们。

但问题是,这种行为只出现在更新TortoiseSVN之后。在旧版本中,它不会恢复已删除的文件。 - Hrvoje Golcic

5
我认为你可能想知道如何获取一个工作副本,以便你只能在任何给定时间内处理项目的一部分,而不必将项目的其他部分全部放入工作副本中。
此外,我认为你正在说,你现在的方法是检出整个项目,然后手动删除你不想看到的部分。
更好的方法是使用“稀疏检出”的概念。
在最新版本的 TortoiseSVN 中,检出对话框上有一个“选择项目”按钮。 这允许你用复选框选择你想要包含在工作副本中的每个项目。 当你检出或更新时,其他项目将不会下载到你的工作副本中。 “更新到修订版…”对话框也包含这个“选择项目”功能。 请注意这是“右键单击->TortoiseSVN->更新到修订版…”而不仅仅是“右键单击->更新”。
你还可以使用“更新到修订版”为单个项目设置深度为“排除”,如果你只需要去掉一个或两个项目。
从命令行,使用带有“--depth”选项的“svn update”或“svn checkout”是实现相同效果的方式。根据需要重复更改“--depth”选项来获取具有任意项目集的工作副本。

重要提示:使用此方法可能会在“.svn”目录中留下“原始”的文件副本,继续占用磁盘空间。要删除这些副本,请使用适当选项的“svn cleanup”操作。在TortoiseSVN中,这意味着勾选“vacuum pristine”选项。 - Ben

4
这里有两种删除方法:
1. 从文件系统中删除(使用“rm”或“delete”)。 2. 从版本控制中删除(使用“svn delete”)。
请确保您知道哪种删除方法适用于您。如果您只是从文件系统(本地机器)中删除,则当您要求更新到您存储库中的最新版本时,您应该会重新获取文件。
如果您从版本控制中删除,则它是一个svn更改操作,并且在运行 svn commit 之前不会应用于存储库。此后,随着其他人更新,svn将从他们的存储库中删除该文件。
请注意,这并不意味着无法获得该文件的副本。 SVN保留了每个版本的完整历史记录,因此如果您请求具有文件副本的非当前修订版本,则将获得该svn delete文件在该修订版本中的副本。
在极少数情况下,如果您真的希望文件在历史记录中消失,那么您需要进行一些脚本处理。基本上,您将创建一个模仿旧存储库的新存储库(减去该文件)。为此,
对于从1到当前的每个修订号。
1. 从旧存储库中获取文件。 2. 删除问题文件。 3. 提交到新存储库。
请记住,这可能有点难以做到完美,因为您需要想出解决方案来保留元数据,例如文件权限、提交消息、svn属性、提交时间和提交用户名等。
除非有全局性的重大原因(如法院命令),否则我强烈建议不要以这种方式重建历史记录。

2

您必须通过svn删除文件。它必须“知道”您想要将它们删除。如果您不使用svn将它们删除,似乎它们就会消失,因此更新会将它们恢复。

步骤如下:

本地删除: $ svn delete somefile

提交删除到仓库 $ svn commit -m "已删除文件'somefile'"


抱歉,我刚看到你已经知道了 SVN 删除操作。但是没有其他方法。你必须与 SVN 通信,告诉它应该删除该文件... 尝试使用 IDE 的 SVN 插件,并仅通过 IDE 删除文件和文件夹。 - SilentBob470

-1

当问题发生后,我会采取以下措施:

  1. 在Tortoise SVN窗口中选择所有“已还原”的行,并复制
  2. 粘贴到新的Excel表格的第二列中
  3. 在第一列中输入:del "
  4. 通过双击第一个单元格右下角,在恢复的文件路径旁边填充del "
  5. 在每个路径后面填写一个闭合的"
  6. Win+R(开始->运行)notepad->输入。复制所有内容并粘贴到记事本中。选择并复制一个制表符,Ctrl + H,替换所有制表符为空格以删除制表符
  7. Win+R cmd->输入,右键粘贴删除命令到命令行中,按Enter键即可删除文件

我知道这是一长串指令,但我相信它们应该成为开发人员的第二天性,并且有必要快速了解和处理多种目的,例如使用Excel的方式、快速创建和运行批处理命令等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接