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

时间:2014-08-04 11:45:16

标签: svn tortoisesvn

我在一个开发团队中工作,我们没有完全分开的代码。因此,当我处理一段时间的事情大约一周时,我需要在提交更改之前进行更新。但是当我这样做时,所有已删除的文件都将被恢复。我知道有SVN删除操作,但是对每个删除的文件或目录都很烦人。

是否有任何技巧,如何阻止此功能?

5 个答案:

答案 0 :(得分:9)

所以,这基本上不是一个新的答案,但现有的答案似乎都不符合您的确切问题(以及我经常遇到的问题)。

以下是我的方法:如果您删除了文件,并且不希望它们在必要的更新期间恢复:

  1. 使用TortoiseSVN功能"检查修改"
  2. 按状态
  3. 排序列表
  4. 选择状态为"缺少"
  5. 的所有文件
  6. 右键单击,删除
  7. 当然这是" SVN删除",但这样你就不必在实际删除文件时做到这一点,并且能够批量标记所有文件。

答案 1 :(得分:4)

这里有两种删除。

  1. 从文件系统(rmdelete)删除。
  2. 从版本控制中删除(svn delete)。
  3. 确保您知道自己在做什么。如果您只是从文件系统(本地计算机)中删除,那么当您要求更新到存储库中的最新版本时,应该将文件恢复。

    如果要从版本控制中删除,则它是一个svn 更改操作,并且在您运行svn commit之前不会应用于存储库。在其他人更新之后,svn将从他们的存储库中删除该文件。

    请注意,这并不意味着无法获取该文件的副本。 SVN会保留每个修订版的完整历史记录,因此,如果您请求包含该文件副本的非当前版本,您将获得该版本中svn delete d文件的副本。

    在极少数情况下,您确实希望文件也从历史记录中删除,您需要执行一些脚本编写。基本上,您将创建一个新的存储库,模仿旧存储库(减去文件)。要做到这一点

    对于从1到当前的每个修订号。

    1. 从旧存储库中获取文件。
    2. 删除有问题的文件。
    3. 提交新存储库
    4. 请记住,这可能有点难以做好,因为您需要提出保存元数据的解决方案,例如文件权限,提交消息,svn属性,提交时间和提交用户名

      我强烈建议不要以这种方式重建你的历史,除非有一些全球压倒一切的理由这样做,比如法院命令。

答案 2 :(得分:2)

您必须通过svn删除文件。它必须'知道'你想删除它们。如果你不使用svn来删除它们,它们似乎就会丢失,所以更新会恢复它们。

步骤是:

在本地删除: $ svn删除somefile

将删除提交到存储库 $ svn commit -m“删除文件'somefile'”

答案 3 :(得分:2)

我想你可能会问如何获得一份工作副本,你可以在任何特定的时间只处理项目的一部分,而不需要在你的工作副本中有项目的其他部分。

此外,我认为你说你当前的方法是结账整个项目,然后手动删除你不想看到的项目。

更好的方法是使用“稀疏结账”的概念。

在最新版本中,TortoiseSVN在结帐对话框中有一个“选择项目”按钮。这允许您使用复选标记选择要包含在工作副本中的每个项目。结帐或更新时,其他项目不会下载到您的工作副本。 “更新到修订版本...”对话框还包含此“选择项目”功能。请注意,这是“右键单击 - > TortoiseSVN->更新到修订版...”而不仅仅是“右键单击 - >更新”。

如果您只需要摆脱一两件物品,您也可以使用“更新到修订版”将深度设置为“排除”。

从命令行,使用“--depth”选项的“svn update”或“svn checkout”是完成同样事情的方法。根据需要重复更改“--depth”选项以获取具有任意项目集的工作副本。

答案 4 :(得分:0)

要在问题发生后缓解,我这样做:

  1. 选择“已恢复”的tortoise svn窗口中的所有行, 并复制
  2. 粘贴新Excel工作表的第二列
  3. 在第一列中,键入:del“
  4. 通过双击您键入del的第一个单元格的右下角,在“恢复的文件”路径旁边填充del“
  5. 在每个路径后填写“
  6. Win + R(开始 - >运行)记事本 - >输入。复制全部并粘贴到记事本中。选择并复制一个选项卡,Ctrl + H,全部替换,替换选项卡,不删除选项卡
  7. Win + R cmd - >在命令行中输入,右键单击并粘贴删除命令,按回车键,文件将被删除
  8. 我知道这些是一长串指令,但我相信它们应该是开发人员的第二天性,并且必须快速了解并快速进行,出于多种目的,使用excel这样,创建和运行批处理快速命令等...