SVN中的'删除'和'unversion'有什么区别?

Izz*_*zzo 11 svn version-control

我有一个在SVN中受到版本控制的文件(我使用tortoiseSVN).这个文件已经过时了,因此我不再希望它在我的仓库的工作副本中.但是,保留该文件的历史记录可能会很好.

我本质上想要"删除"此文件,以便不再跟踪或"版本化".我可以选择"删除"此文件,或"取消"此文件.

'delete'和'unversion'之间有什么区别?每个命令的用例是什么?

Cri*_*ati 5

从SVN中删除文件并不会删除其修订历史记录。
显然删除历史记录是可能的[SO]:从 svn 存储库中删除包含所有历史记录的文件

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

  • (源)文件包含:

    • 项目序列:(代码行)

同样的方式:

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

    • 项目序列:其子项:

      • 文件夹

      • 文件

假设我们有一个SVN文件:

  • 在修订版M中,修改了该文件中的一行代码(让我们将其作为最后一行以更好地说明示例)

  • 在修订版N (> M ) 中,该行已被删除

情况如下(按时间倒序):

  1. 对于大于N 的文件修订,该行将不存在

  2. 对于MN之间的文件修订,该行将包含其最后的内容

  3. 对于低于M 的文件修订版,该行将具有其旧内容

  4. ....

如果删除文件(从其父文件夹角度),也会发生同样的情况。

现在,回到你的问题:在我的TortoiseSVN ( v1.9.5 ) 上:

  • 我有一个删除选项

  • 我没有Unversion选项,但是

  • 我确实有一个删除(保留本地)选项 - 这是(可能更好的名称)Unversion。就命令行而言,这相当于svn delete --keep-local

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

[TortoiseSVN]:删除、移动和重命名包含的官方信息很少。

就我个人而言,我认为保留本地文件没有任何用处,除非修复错误,例如删除先前提交的不属于存储库(特定于用户)的项目,例如:

  • Eclipse .classpath .project

  • PyCharm .idea

  • VStudio .vcxproj.user

[RedBean.SVNBook]:svn删除状态:

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