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.
svn checkout (co) — Extraire une copie de travail à partir d'un dépôt.
svn checkout URL[@REV]... [CHEMIN]
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.
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 $