SVN中“delete”和“unversion”的区别是什么?

11

我有一个文件曾经被 SVN(我使用 TortoiseSVN)版本控制。这个文件现已过时,所以我不再希望它存在于我的版本库工作副本中。然而,保留该文件的历史记录可能是有益的。

实际上,我想要“删除”该文件,使其不再被跟踪或“版本化”。我可以选择“删除”该文件或“取消版本控制”该文件。

“删除”和“取消版本控制”之间有什么区别?每个命令的用例是什么?

1个回答

5
SVN中删除文件,不会删除其修订历史记录。
显然,删除历史记录是可能的 [SO]: Delete file with all history from svn repository

为了使事情更容易,让我们考虑以下类比。
SVNPoV来看,就像:

  • 一个(源)文件由以下组成:

    • 一系列项目:行(代码行)

同样地:

  • 一个文件夹由以下组成:

    • 一系列项目:它的子项:

      • 文件夹

      • 文件

假设我们有一个SVN文件:

在修订版M中,该文件中的一行代码(我们将其作为最后一行以更好地说明示例)已被修改。
在修订版N(> M)中,该行已被删除。
情况如下(按时间倒序):
对于大于N的文件版本,该行将不会存在。
对于MN之间的文件版本,该行将具有其最后的内容。
对于低于M的文件版本,该行将具有其旧内容。
如果从父文件夹的角度删除文件,则会发生同样的事情。
现在回到您的问题:在我的TortoiseSVN(v1.9.5)中:
  • 我有一个 删除 选项

  • 我没有一个 取消版本控制 选项,但是

  • 我有一个 删除(保留本地) 选项 - 可以用更好的名称来表示 取消版本控制。在命令行方面,这相当于 svn delete --keep-local

在对文件执行其中一个操作后,该文件将不再受 SVN 跟踪,但与 删除 不同(其中文件也从工作副本/磁盘中删除),取消版本控制 将其留在磁盘上,就像用户手动将其复制到那里一样(随后的 svn st 将“看到”该文件未受版本控制:第一列将是一个问号 (?),如 [RedBean.SVNBook]: svn status 中所述)。

[TortoiseSVN]: Deleting, Moving and Renaming中包含的官方信息非常少。

个人认为,除了在修复错误时保留本地文件外,没有任何意义,例如删除先前提交到代码库中不属于库的项(特定于用户):

  • Eclipse.classpath.project

  • PyCharm.idea

  • VStudio.vcxproj.user

[RedBean.SVNBook]: svn delete指出:

使用--keep-local选项来覆盖默认的svn delete行为,该行为还会删除计划进行版本控制的目标文件。当您意识到不小心提交了一个需要保留在工作副本中但不应添加到版本控制的文件时,这很有帮助。

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