本手册编写于描述 Subversion 1.2。如果您正在运行更新版本的 Subversion,我们强烈建议您访问https://svnbooks.subversion.org.cn/并查阅适合您的 Subversion 版本的本书版本。
虽然这些命令不如本章前面讨论的命令使用频繁,但您偶尔会需要它们。
当 Subversion 修改您的工作副本(或 .svn
中的任何信息)时,它会尽可能安全地进行。在更改工作副本之前,Subversion 会将它的意图写入日志文件。接下来,它执行日志文件中的命令以应用请求的更改,并在工作时锁定工作副本的相关部分,以防止其他 Subversion 客户端在更改过程中访问工作副本。最后,Subversion 会删除日志文件。在架构上,这类似于日志文件系统。如果 Subversion 操作被中断(例如,进程被杀死或机器崩溃),日志文件将保留在磁盘上。通过重新执行日志文件,Subversion 可以完成之前开始的操作,您的工作副本可以恢复到一致的状态。
这就是 svn cleanup 的作用:它搜索您的工作副本并运行任何剩余的日志,在此过程中删除工作副本锁定。如果 Subversion 曾经告诉您您的工作副本的某些部分被“锁定”,那么您应该运行此命令。此外,svn status 将在锁定项旁边显示一个 L
$ svn status L somedir M somedir/foo.c $ svn cleanup $ svn status M somedir/foo.c
不要将这些工作副本锁定与 Subversion 用户在使用“锁定-修改-解锁”并发版本控制模型时创建的普通锁定混淆;有关说明,请参阅“锁定”的三种含义。
svn import 命令是一种快速将未版本化的文件树复制到存储库中的方法,必要时创建中间目录。
$ svnadmin create /usr/local/svn/newrepos $ svn import mytree file:///usr/local/svn/newrepos/some/project \ -m "Initial import" Adding mytree/foo.c Adding mytree/bar.c Adding mytree/subdir Adding mytree/subdir/quux.h Committed revision 1.
前面的示例将目录 mytree
的内容复制到存储库中 some/project
目录下
$ svn list file:///usr/local/svn/newrepos/some/project bar.c foo.c subdir/
请注意,导入完成后,原始树不会被转换为工作副本。要开始工作,您仍然需要svn checkout 树的新工作副本。