本文档旨在描述 Apache™ Subversion® 的 1.7.x 系列。如果您运行的是其他版本的 Subversion,强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的文档。
svn checkout (co) — 从版本库检出工作副本。
将工作副本检出到名为 mine
的目录中
$ svn checkout file:///var/svn/repos/test mine A mine/a A mine/b A mine/c A mine/d Checked out revision 20. $ ls mine $
将两个不同的目录检出到两个独立的工作副本中
$ svn checkout file:///var/svn/repos/test \ file:///var/svn/repos/quiz A test/a A test/b A test/c A test/d Checked out revision 20. A quiz/l A quiz/m Checked out revision 13. $ ls quiz test $
将两个不同的目录检出到两个独立的工作副本中,但将它们都放置到名为 working-copies
的目录中
$ svn checkout file:///var/svn/repos/test \ file:///var/svn/repos/quiz \ working-copies A working-copies/test/a A working-copies/test/b A working-copies/test/c A working-copies/test/d Checked out revision 20. A working-copies/quiz/l A working-copies/quiz/m Checked out revision 13. $ ls working-copies
如果您中断检出(或其他因素中断您的检出,例如连接丢失等),您可以通过再次发出相同的检出命令或更新不完整的工作副本来重新启动检出。
$ svn checkout file:///var/svn/repos/test mine A mine/a A mine/b ^C svn: E200015: Caught signal $ svn checkout file:///var/svn/repos/test mine A mine/c ^C svn: E200015: Caught signal $ svn update mine Updating 'mine': A mine/d Updated to revision 20. $
如果您希望检出除最新版本以外的其他版本,可以通过向 svn checkout 命令提供 --revision
(-r
) 选项来实现。
$ svn checkout -r 2 file:///var/svn/repos/test mine A mine/a Checked out revision 2. $
在 1.7 版本之前,如果您尝试将目录检出到包含检出本身将创建的文件或子目录的现有目录之上,Subversion 默认情况下会报错。Subversion 1.7 对这种情况的处理方式不同,允许检出继续进行,但将任何阻塞对象标记为树冲突。使用 --force
选项可以覆盖此安全措施。当您使用 --force
选项检出时,检出目标树中任何原本会阻塞检出的未版本化文件仍将成为版本化文件,但 Subversion 会保留其内容原样。如果这些内容与版本库中该路径的文件(作为检出的一部分下载)不同,则该文件将显示为具有本地修改(将您检出的版本化文件转换为检出之前未版本化文件的更改)—当检出完成后。
$ mkdir project $ mkdir project/lib $ touch project/lib/file.c $ svn checkout file:///var/svn/repos/project/trunk project --force E project/lib A project/lib/subdir E project/lib/file.c A project/lib/anotherfile.c A project/include/header.h Checked out revision 21. $ svn status wc M project/lib/file.c $ svn diff wc Index: project/lib/file.c =================================================================== --- project/lib/file.c (revision 1) +++ project/lib/file.c (working copy) @@ -3 +0,0 @@ -/* file.c: Code for acting file-ishly. */ -#include <stdio.h> -/* Not feeling particularly creative today. */ $
与其他工作副本一样,您可以选择通常可用的选项:还原部分或全部这些本地 “修改”、提交它们或继续修改您的工作副本。
此功能对于执行未版本化目录树的原地导入特别有用。通过首先将树导入版本库,然后使用 --force
选项将新的版本库位置检出到未版本化树之上,您可以有效地将未版本化树转换为工作副本。
$ svn mkdir -m "Create newproject project root." \ file://var/svn/repos/newproject $ svn import -m "Import initial newproject codebase." newproject \ file://var/svn/repos/newproject/trunk Adding newproject/include Adding newproject/include/newproject.h Adding newproject/lib Adding newproject/lib/helpers.c Adding newproject/lib/base.c Adding newproject/notes Adding newproject/notes/README Committed revision 22. $ svn checkout file://`pwd`/repos-1.6/newproject/trunk newproject --force E newproject/include E newproject/include/newproject.h E newproject/lib E newproject/lib/helpers.c E newproject/lib/base.c E newproject/notes E newproject/notes/README Checked out revision 2. $ svn status newproject $