This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

有时候你需要的只是清理一下

既然我们已经讲到了使用 Subversion 时经常碰到的日常工作, 现在将介绍 一些和工作副本相关的管理性任务.

删除工作副本

服务端的 Subversion 不会跟踪工作副本的状态或存在情况, 所以工作 副本不会影响服务器的工作负载. 同样, 删除工作副本时也不需要告诉服务 器.

如果用户下次可能还要用到工作副本, 那么在下次使用之前, 直接把工作 副本留在磁盘上也不会产生什么问题, 不过在开始使用之前, 记得用 svn update 更新一下工作副本.

然而, 如果用户已经确定自己以后不会再用到工作副本, 为了节省磁盘 空间, 你也可以用操作系统提供的删除命令把工作副本删除掉. 但是在删除 之前我们建议执行一下 svn status, 然后查看带有前缀 ? 的列表中是否有重要的文件.

从中断中恢复

当 Subversion 修改工作副本时—修改文件或文件的管理状态— 它会尽量保证操作能够安全地执行. 在修改工作副本之前, Subversion 把 它的意向操作记在一个私有的 待完成列表 (to-do list) 中, 然后开始执行操作, 在执行过程中 Subversion 会去获取工作副本中相 关部分的锁, 这可以避免其他客户端在工作副本处于中间状态时对它进行 访问, 最后, Subversion 释放锁并清理待完成列表. 从结构上来看, 它有点 像日志文件系统. 如果 Subversion 的一个操作被中断了 (例如进程被杀死或 机器崩溃), 待完成列表将保留在磁盘上, 这就允许 Subversion 后面可以再 打开列表, 做完未完成的工作, 把工作副本恢复到一致的状态.

上面介绍的正是 svn cleanup 的功能: svn cleanup 在工作副本中搜索未完成的工作, 操作完成 时移除工作副本的锁. 如果 Subversion 告诉你工作副本中的某些部分是被 锁住 的, 执行 svn cleanup 就可以解决 该问题. svn status 也会显示工作副本的加锁状态, 被加锁的路径其左边有一字符 L:

$ svn status
  L     somedir
M       somedir/foo.c
$ svn cleanup
$ svn status
M       somedir/foo.c

不要把工作副本的管理锁和用户创建的锁相混淆, 后者是为了实现 并发版本控制的 加锁-修改-解锁 模型, 见 的多种涵义.