本文档旨在描述 Subversion 1.6.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 用户在使用锁定-修改-解锁的并发版本控制模型时创建的用户管理锁定混淆;有关说明,请参见边栏 “锁定”的三个含义。