本文档旨在描述 Apache™ Subversion® 的 1.7.x 系列。如果您运行的是其他版本的 Subversion,我们强烈建议您访问 https://svnbook.subversion.org.cn/ 并参考与您的 Subversion 版本相符的文档版本。
现在我们已经介绍了您经常使用 Subversion 执行的日常任务,接下来我们将回顾一些与您的工作副本相关的管理任务。
Subversion 不会跟踪服务器上工作副本的状态或存在,因此在服务器上保留工作副本不会产生任何开销。同样,您也不需要让服务器知道您要删除工作副本。
如果您可能再次使用工作副本,那么将其保留在磁盘上直到您准备再次使用它并没有什么问题,此时您只需执行 svn update 命令即可将其更新并准备使用。
但是,如果您确定不再使用工作副本,则可以使用您的操作系统提供的任何目录删除功能安全地删除整个工作副本。我们建议您在执行此操作之前运行 svn status
命令并查看其输出中以 ?
开头的任何文件,以确保它们不重要。
当 Subversion 修改您的工作副本(无论是您的文件还是其自身的管理状态)时,它会尽力安全地执行操作。在更改工作副本之前,Subversion 会将其意图记录在一个私有的 “待办事项列表” 中。接下来,它执行这些操作以实现所需的更改,并在工作时锁定工作副本的相关部分。这将阻止其他 Subversion 客户端在更改过程中访问工作副本。最后,Subversion 释放其锁并清理其私有的待办事项列表。从架构上讲,这类似于日志文件系统。如果 Subversion 操作被中断(例如,进程被杀死或机器崩溃),私有的待办事项列表将保留在磁盘上。这允许 Subversion 稍后返回到该列表以完成任何未完成的操作,并将您的工作副本恢复到一致的状态。
这就是 svn cleanup 的作用:它会在您的工作副本中搜索并运行任何剩余的任务,并在完成这些操作时移除工作副本锁。如果 Subversion 告诉您工作副本的某些部分被 “锁定,” 运行 svn cleanup 来解决问题。 svn status 命令也会通过在被锁定的路径旁边显示一个 L
来告知您工作副本中的管理锁。
$ svn status L somedir M somedir/foo.c $ svn cleanup $ svn status M somedir/foo.c
不要将这些工作副本管理锁与 Subversion 用户在使用锁定-修改-解锁的并发版本控制模型时创建的用户管理锁混淆;请参阅侧边栏 “锁定”的三种含义 以了解详情。