本手册旨在介绍 Subversion 1.6.x 系列。如果您运行的是其他版本的 Subversion,强烈建议您访问 https://svnbook.subversion.org.cn/ 并查阅适合您 Subversion 版本的手册。

名称

svn copy (cp) — 在工作副本或版本库中复制文件或目录。

概要

svn copy SRC[@REV]... DST

描述

复制工作副本或版本库中的一个或多个文件。 SRCDST 可以是工作副本 (WC) 路径或 URL。复制多个源文件时,将副本作为 DST(当然,必须是目录)的直接子项添加。

WC → WC

复制并计划将项目添加到版本库(带历史记录)。

WC → URL

立即将 WC 的副本提交到 URL。

URL → WC

将 URL 签出到 WC 并计划将其添加到版本库。

URL → URL

完成服务器端复制。这通常用于分支和标记。

如果没有提供挂钩修订版本(即 @REV),则默认情况下,从工作副本复制的文件将使用 BASE 修订版本,而从 URL 复制的文件将使用 HEAD 修订版本。

[Note] 注意

您只能在单个版本库中复制文件。Subversion 不支持跨版本库复制。

选项

--editor-cmd CMD
--encoding ENC
--file (-F) FILENAME
--force-log
--ignore-externals
--message (-m) MESSAGE
--parents
--quiet (-q)
--revision (-r) REV
--with-revprop ARG

示例

复制工作副本中的项目(这将计划复制 - 在您提交之前,不会将任何内容放入版本库)

$ svn copy foo.txt bar.txt
A         bar.txt
$ svn status
A  +    bar.txt

将工作副本中的多个文件复制到子目录

$ svn copy bat.c baz.c qux.c src
A         src/bat.c
A         src/baz.c
A         src/qux.c

bat.c 的修订版本 8 复制到工作副本中的另一个名称

$ svn copy -r 8 bat.c ya-old-bat.c
A         ya-old-bat.c

将工作副本中的项目复制到版本库中的 URL(这是立即提交,因此您必须提供提交消息)

$ svn copy near.txt file:///var/svn/repos/test/far-away.txt -m "Remote copy."

Committed revision 8.

将版本库中的项目复制到工作副本(这只会计划复制 - 在您提交之前,不会将任何内容放入版本库)

$ svn copy file:///var/svn/repos/test/far-away -r 6 near-here
A         near-here
[Tip] 提示

这是在版本库中恢复已删除文件的推荐方法!

最后,在两个 URL 之间复制

$ svn copy file:///var/svn/repos/test/far-away \
           file:///var/svn/repos/test/over-there -m "remote copy."

Committed revision 9.
$ svn copy file:///var/svn/repos/test/trunk \
           file:///var/svn/repos/test/tags/0.6.32-prerelease -m "tag tree"

Committed revision 12.
[Tip] 提示

这是在版本库中 标记 修订版本的最简单方法 - 只需将 svn copy 该修订版本(通常是 HEAD)复制到您的 tags 目录中。

如果您忘记标记,也不用担心 - 您随时可以指定旧的修订版本并进行标记

$ svn copy -r 11 file:///var/svn/repos/test/trunk \
           file:///var/svn/repos/test/tags/0.6.32-prerelease \
           -m "Forgot to tag at rev 11"

Committed revision 13.