本段文字尚在编写中,可能会随时更改,并且可能无法准确描述任何已发布的 Apache™ Subversion® 软件版本。 建议不要将此页面设为书签或将其推荐给其他人。 请访问 http://svnbooks.subversion.org.cn/ 获取此书的稳定版本。
svn checkout (co) — 从仓库检出工作副本。
svn checkout URL[@REV]... [PATH]
从仓库检出一个工作副本。 如果省略 PATH
,则将使用 URL 的基本名称作为目标目录。 如果给出多个 URL,则每个 URL 都将检出到 PATH
的一个子目录中,子目录的名称为 URL 的基本名称。
将工作副本检出到名为 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 $