Diese Dokumentation wurde zur Beschreibung der Serie 1.7.x von Apache™ Subversion® erstellt. Falls Sie eine unterschiedliche Version von Subversion einsetzen, sei Ihnen dringend angeraten, bei http://www.svnbook.com/ vorbeizuschauen und stattdessen die zu Ihrer Version von Subversion passende Version dieser Dokumentation heranzzuiehen.

Name

svn checkout (co) — Auschecken einer Arbeitskopie aus einem Projektarchiv.

Aufruf

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

Beschreibung

Checkt eine Arbeitskopie aus einem Projektarchiv aus. Wird PATH ausgelassen, wird der Basisname des URL als Ziel verwendet. Werden mehrere URLs angegeben, wird jeder in ein Unterverzeichnis von PATH ausgecheckt, wobei der Name des Unterverzeichnisses dem Basisnamen des URL entspricht.

Optionen

Beispiele

Eine Arbeitskopie in ein Verzeichnis mine auschecken:

$ svn checkout file:///var/svn/repos/test mine
A    mine/a
A    mine/b
A    mine/c
A    mine/d 
Ausgecheckt. Revision 20.
$ ls
mine
$

Zwei unterschiedliche Verzeichnisse in zwei getrennte Arbeitskopien auschecken:

$ svn checkout file:///var/svn/repos/test \
               file:///var/svn/repos/quiz
A    test/a
A    test/b
A    test/c
A    test/d 
Ausgecheckt. Revision 20.
A    quiz/l
A    quiz/m 
Ausgecheckt. Revision 13.
$ ls
quiz  test
$

Zwei unterschiedliche Verzeichnisse in zwei getrennte Arbeitskopien auschecken, jedoch beide in ein Verzeichnis 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 
Ausgecheckt. Revision 20.
A    working-copies/quiz/l
A    working-copies/quiz/m 
Ausgecheckt. Revision 13.
$ ls
working-copies

Falls Sie das Auschecken unterbrechen (oder das Auschecken durch irgendetwas anderes unterbrochen wird, etwa durch Verlust der Netzverbindung o.ä.), können Sie es erneut durch Eingabe des gleichen Befehls oder durch die Aktualisierung der unvollständigen Arbeitskopie wiederholen:

$ svn checkout file:///var/svn/repos/test mine
A    mine/a
A    mine/b
^C 
svn: E200015: Abbruchsignal empfangen
$ svn checkout file:///var/svn/repos/test mine
A    mine/c
^C 
svn: E200015: Abbruchsignal empfangen
$ svn update mine
Updating 'mine':
A    mine/d 
Aktualisiert zu Revision 20.
$

Falls Sie eine andere als die letzte Revision auschecken möchten, können Sie dem Befehl svn checkout die Option --revision (-r) mitgeben:

$ svn checkout -r 2 file:///var/svn/repos/test mine
A    mine/a 
Ausgecheckt. Revision 2.
$

Vor Version 1.7 würde sich Subversion standardmäßig beschweren, falls Sie versuchen, ein Verzeichnis auf einem bestehenden Verzeichnis auszuchecken, das Dateien oder Unterverzeichnisse beinhaltet, die der Checkout selbst angelegt hätte. Subversion behandelt diese Situation unterschiedlich, indem es das Auschecken weiterlaufen lässt, aber Objekte, die im Weg liegen, als Baumkonflikte markiert. Verwenden Sie die Option --force, um diese Schutzmaßnahme zu umgehen. Wenn Sie mit der Option --force auschecken, gerät jede unversionierte Dateien im Checkout-Zielverzeichnisbaum, die normalerweise den Checkout verhindert hätte, unter Versionskontrolle, jedoch ändert Subversion ihren Inhalt nicht. Wenn dieser Inhalt sich vom Inhalt der Datei an dieser Stelle im Projektarchiv unterscheidet (der als Teil des Checkouts heruntergeladen wurde), erscheint die Datei nach vollendetem Checkout als lokal geändert, wobei die Änderungen der Überführung der versionierten, ausgecheckten Datei in die unversionierte Datei vor dem Checkout entsprechen.

$ mkdir project
$ mkdir project/lib
$ touch project/lib/file.c
$ svn checkout file:///var/svn/repos/project/trunk project 
svn: Verzeichnis »project/lib« konnte nicht hinzugefügt werden: ein nicht versi
oniertes Verzeichnis mit demselben Namen existiert bereits
$ 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 
Ausgecheckt, 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. */

$

Wie auch bei anderen Arbeitskopien haben Sie die üblichen Möglichkeiten zur Auswahl: die lokalen Änderungen teilweise oder vollständig rückgängig machen, sie übergeben oder mit Änderungen in Ihrer Arbeitskopie fortfahren.

Besonders nützlich ist diese Funktionalität, um vor Ort unversionierte Verzeichnisbäume zu importieren. Indem zunächst der Baum in das Projektarchiv importiert und dann über den unversionierten Baum mit der Option --force ausgecheckt wird, bewirken Sie hiermit eine Überführung des unversionierten Baums in eine Arbeitskopie.

$ 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 
Hinzufügen     newproject/include
Hinzufügen     newproject/include/newproject.h
Hinzufügen     newproject/lib
Hinzufügen     newproject/lib/helpers.c
Hinzufügen     newproject/lib/base.c
Hinzufügen     newproject/notes
Hinzufügen     newproject/notes/README

Revision 22 übertragen.
$ 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 
Ausgecheckt. Revision 2.
$ svn status newproject
$