This text is a work in progress—highly subject to change—and may not accurately describe any released version of the Apache™ Subversion® software. Bookmarking or otherwise referring others to this page is probably not such a smart idea. Please visit http://www.svnbook.com/ for stable versions of this book.

Nom

svn checkout (co) — Extraire une copie de travail à partir d'un dépôt.

Synopsis

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

Description

Extraire une copie de travail à partir d'un dépôt. Si CHEMIN n'est pas spécifié, le nom de fichier de l'URL (basename) est utilisé comme destination. Si plusieurs URL sont fournies, chacune est extraite dans un sous-répertoire de CHEMIN, avec comme nom de sous-répertoire le nom de fichier de l'URL.

Options

Exemples

Extraire une copie de travail dans le répertoire mien :

$ svn checkout file:///var/svn/depot/test mien
A  mien/a
A  mien/b
A  mien/c
A  mien/d
Révision 20 extraite.
$ ls
mien

Extraire deux répertoires différents vers deux copies de travail séparées :

$ svn checkout file:///var/svn/depot/test \
               file:///var/svn/depot/quizz
A  test/a
A  test/b
A  test/c
A  test/d
Révision 20 extraite.
A  quizz/l
A  quizz/m
Révision 13 extraite.
$ ls
quizz  test

Extraire deux répertoires différents vers deux copies de travail séparées, mais les place toutes les deux dans un répertoire appelé copies-de-travail :

$ svn checkout file:///var/svn/depot/test \
               file:///var/svn/depot/quiz \
               copies-de-travail
A  copies-de-travail/test/a
A  copies-de-travail/test/b
A  copies-de-travail/test/c
A  copies-de-travail/test/d
Révision 20 extraite.
A  copies-de-travail/quizz/l
A  copies-de-travail/quizz/m
Révision 13 extraite.
$ ls
copies-de-travail

Si vous interrompez l'extraction (ou si n'importe quoi interromp l'extraction, comme la perte du réseau par exemple), vous pouvez recommencer l'extraction en invoquant exactement la même commande ou en mettant à jour la copie incomplète :

$ svn checkout file:///var/svn/depot/test mien
A  mien/a
A  mien/b
^C
svn: E200015: Signal capté
$ svn checkout file:///var/svn/depot/test mien
A  mien/c
^C
svn: E200015: Signal capté
$ svn update mien
A  mien/d
Révision 20 extraite.
$

Si vous voulez extraire une révision qui n'est pas la plus récente, vous pouvez le faire à l'aide de l'option --revision (-r) de la commande svn checkout :

$ svn checkout -r 2 file:///var/svn/depot/test mien
A    mien/a
Révision 2 extraite.
$

Avant la version 1.7, Subversion se plaignait par défaut si vous essayiez d'extraire un dossier au-dessus d'un dossier existant qui contenait des fichiers ou des sous-dossiers que l'extraction elle-même aurait créés. Subversion 1.7 se comporte différemment, en autorisant l'extraction mais en marquant tous les objets bloquants en conflit. Utilisez l'option --force pour outrepasser cette protection. Quand vous faites une extraction avec l'option --force, tout fichier non suivi en versions dans l'arborescence cible qui bloquerait l'extraction sera placé en suivi en versions, mais avec son contenu actuel tel quel. Si ce contenu n'est pas celui du fichier du dépôt (qui a été téléchargé dans le cadre de l'extraction), le fichier apparaît comme ayant des modifications locales (les différences entre la version suivie en version extraite du dépôt et la version non suivie en versions que vous aviez avant l'extraction) une fois l'extraction terminée.

$ mkdir projet
$ mkdir projet/lib
$ touch projet/lib/fichier.c
$ svn checkout file:///var/svn/depot/projet/trunk projet
svn: Failed to add directory 'projet/lib': an unversioned directory of the sa
me name already exists
$ svn checkout file:///var/svn/depot/projet/trunk projet --force
E    project/lib
A    project/lib/sous-rep
E    project/lib/fichier.c
A    project/lib/autre-fichier.c
A    project/include/header.h
Révision 21 extraite.
$ svn status wc
M       project/lib/fichier.c
$ svn diff wc
Index: project/lib/fichier.c
===================================================================
--- project/lib/fichier.c	(revision 1)
+++ project/lib/fichier.c	(working copy)
@@ -3 +0,0 @@
-/* fichier.c: Code pour agir fichier-ment. */
-#include <stdio.h>
-/* Pas très productif aujourd'hui */

$

Comme dans toute autre copie de travail, vous avez les mêmes choix possibles : annuler toutes ou certaines des « modifications » locales, les propager ou continuer à travailler sur votre copie de travail.

Cette fonctionnalité est particulièrement utile pour effectuer des imports « sur place » d'arborescences non suivies en versions. En commençant par importer l'arborescence dans le dépôt, puis en faisant une extraction du nouveau dépôt par dessus l'arborescence non suivie en versions avec l'option --force, vous transformez effectivement l'arborescence non suivie en versions en copie de travail.

$ svn mkdir -m "Créer la racine de nouveau-projet." \
      file://var/svn/depot/nouveau-projet
$ svn import -m "Import initial du code source de nouveau-projet." \
      nouveau-projet \
      file://var/svn/depot/nouveau-projet/trunk
Ajout          nouveau-projet/include
Ajout          nouveau-projet/include/nouveau-projet.h
Ajout          nouveau-projet/lib
Ajout          nouveau-projet/lib/helpers.c
Ajout          nouveau-projet/lib/base.c
Ajout          nouveau-projet/notes
Ajout          nouveau-projet/notes/LISEZMOI
Révision 22 propagée.
$ svn checkout file://`pwd`/depot-1.6/nouveau-projet/trunk nouveau-projet --force
E    nouveau-projet/include
E    nouveau-projet/include/nouveau-projet.h
E    nouveau-projet/lib
E    nouveau-projet/lib/helpers.c
E    nouveau-projet/lib/base.c
E    nouveau-projet/notes
E    nouveau-projet/notes/LISEZMOI
Révision 2 extraite.
$ svn status nouveau-projet
$