NAME

svncopy - extended form of svn copy

SYNOPSIS

svncopy.pl [option ...] source [source ...] destination

This script copies one Subversion location or set of locations to another, in the same way as svn copy. Using the script allows more advanced operations, in particular allowing svn:externals to be dealt with properly for branching or tagging.

Parameters:
 source         Subversion item to copy from.
                Multiple sources can be given.
 destination    Destination to copy to.

Options:
 -t [--tag]             : set svn:externals to current version
    [--pin-externals ]
 -b [--branch]          : update fully contained svn:externals
    [--update-externals]
 -m [--message] arg     : specify commit message ARG
 -F [--file] arg        : read data from file ARG
 -r [--revision] arg    : ARG (some commands also take ARG1:ARG2 range)
                          A revision argument can be one of:
                            NUMBER       revision number
                            "{" DATE "}" revision at start of the date
                            "HEAD"       latest in repository
                            "BASE"       base rev of item's working copy
                            "COMMITTED"  last commit at or before BASE
                            "PREV"       revision just before COMMITTED
 -q [--quiet]           : print as little as possible
 --username arg         : specify a username ARG
 --password arg         : specify a password ARG
 --no-auth-cache        : do not cache authentication tokens
 --force-log            : force validity of log message source
 --encoding arg         : treat value as being in charset encoding ARG
 --config-dir arg       : read user config files from directory ARG
 --[no]verbose          : sets the script to give lots of output

PARAMETERS

source

The subversion item or items to copy from.

destination

The destination URL to copy to.

OPTIONS

-t [--pin-externals or --tag]

Update any svn:externals to ensure they have a version number, using the current destination version if none is already specified. Useful for tagging operations.

-b [--update-externals or --branch]

Update any unversioned svn:externals which point to a location within one of the sources so that they point to the corresponding location within the destination.

Note: --pin-externals and --update-externals are mutually exclusive.

-m [--message] arg

Specify commit message ARG

-F [--file] arg

Read data from file ARG

-r [--revision] arg

ARG (some commands also take ARG1:ARG2 range) A revision argument can be one of:

NUMBER       revision number
"{" DATE "}" revision at start of the date
"HEAD"       latest in repository
"BASE"       base rev of item's working copy
"COMMITTED"  last commit at or before BASE
"PREV"       revision just before COMMITTED
-q [--quiet]

Print as little as possible

--username arg

Specify a username ARG

--password arg

Specify a password ARG

--no-auth-cache

Do not cache authentication tokens

--force-log

Force validity of log message source

--encoding arg

Treat value as being in charset encoding ARG

--config-dir arg

Read user configuration files from directory ARG

--[no]verbose

Sets the script to give lots of output when it runs.

--help

Print a brief help message and exits.

DESCRIPTION

This script performs an svn copy command. It allows extra processing to get around the following limitations of svn copy:

svn:externals definitions are (in Subversion 1.0 and 1.1 at least) absolute paths. This means that an svn copy used as a branch or tag operation on a tree with embedded svn:externals will not do what is expected. The svn:externals will still point at the original location and will not be pinned down.

svncopy --update-externals (or svncopy --branch) will update any unversioned svn:externals in the destination tree which point at locations within one of the source trees so that they point to the corresponding locations within the destination tree instead. This effectively updates the reference to point to the destination tree, and is the behaviour you want for branching.

svncopy --pin-externals (or svncopy --tag) will update any unversioned svn:externals in the destination tree to contain the current version of the directory listed in the svn:externals definition. This effectively pins the reference to the current version, and is the behaviour you want for tagging.

Note: both forms of the command leave unchanged any svn:externals which already contain a version number.