svn checkout (co)
Prev | svn Subcommands | Next

## Name

svn checkout (co) — Check out a working copy from a repository.

## Synopsis

`svn checkout URL[@REV]... [PATH]`

## Description

Check out a working copy from a repository. If `PATH` is omitted, the basename of the URL will be used as the destination. If multiple URLs are given, each will be checked out into a subdirectory of `PATH`, with the name of the subdirectory being the basename of the URL.

## Options

    --depth ARG
    --force
    --ignore-externals
    --quiet (-q)
    --revision (-r) REV

## Examples

Check out a working copy into a directory called `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
    $

Check out two different directories into two separate working copies:

    $ 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
    $

Check out two different directories into two separate working copies, but place both into a directory called `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

If you interrupt a checkout (or something else interrupts your checkout, such as loss of connectivity, etc.), you can restart it either by issuing the identical checkout command again or by updating the incomplete working copy:

    $ 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.
    $

If you wish to check out some revision other than the most recent one, you can do so by providing the `--revision` (`-r`) option to the svn checkout command:

    $ svn checkout -r 2 file:///var/svn/repos/test mine
    A    mine/a
    Checked out revision 2.
    $

Prior to version 1.7, Subversion would complain by default if you try to check out a directory atop an existing directory which contains files or subdirectories that the checkout itself would have created. Subversion 1.7 handles this situation differently, allowing the checkout to proceed but marking any obstructing objects as tree conflicts. Use the `--force` option to override this safeguard. When you check out with the `--force` option, any unversioned file in the checkout target tree which ordinarily would obstruct the checkout will still become versioned, but Subversion will preserve its contents as-is. If those contents differ from the repository file at that path (which was downloaded as part of the checkout), the file will appear to have local modifications—the changes required to transform the versioned file you checked out into the unversioned file you had before checking out—when the checkout completes.

    $ 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. */

    $

As in another other working copy, you have the choices typically available: reverting some or all of those local “modifications”, committing them, or continuing to modify your working copy.

This feature is especially useful for performing in-place imports of unversioned directory trees. By first importing the tree into the repository, and then checking out new repository location atop the unversioned tree with the `--force` option, you effectively transform the unversioned tree into a working copy.

    $ 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
    $

Prev | Up | Next
svn changelist (cl) | Home | svn cleanup