SubVersion/TP

Ce fichier de commande Windows illustre l'usage des principales commandes de SubVersion pour la gestion de révisions.

Ce fichier peut être adapté pour Linux.

Ce tutoriel considère:
 * 1 administrateur
 * 2 éditeurs collaborant (avec des conflits) sur une base de code locale gérée par Subversion.

Il faut ouvrir 3 command prompts

rem =========================================================================== rem Tutoriel SubVersion rem Ce fichier de commande Windows illustre l'usage des principales commandes de rem SubVersion pour la gestion de révisions. rem (c) Didier Donsez, 2007 rem ===========================================================================

rem Telecharger SubVersion pour Windows depuis http://subversion.tigris.org rem Installer (Unzip %SVN_HOME% rem set SVN_HOME=c:\devtools\svn-win32-1.4.4 rem puis set PATH=%PATH%;%SVN_HOME%\bin rem Démarrer -> Exécuter -> Taper "cmd"

rem en parallele des commandes en ligne, vous pouvez utiliser le client Windows TortoiseSVN disponible gratuitement sur http://www.tortoisesvn.org/

rem Aide des principales commandes svn help svnadmin help svnlook help svndumpfilter help svnserve help

svn --version

cd c:\

rem Creation du dépôt mkdir repository svnadmin create repository rem svnadmin create repository --fs-type fsfs dir repository

rem Creation d'un projet hello a partir d'un archetype Maven (@see http://www.sonatype.com/book/archetypes.html#using) mvn archetype:create -DgroupId=demo.svn -DartifactId=hello

rem Importation des fichier du projet hello dans le dépôt svn import hello file:///c:/repository/hello --message "initial import" svnlook youngest repository svnlook tree repository

rem Création d'une copie de travail (checkout) mkdir workingcopy1 svn checkout file:///c:/repository/hello workingcopy1

rem Ajout et Suppression de fichiers echo This is a readme file > workingcopy1\LISEZMOI.txt svn status workingcopy1\LISEZMOI.txt svn add workingcopy1\LISEZMOI.txt svn status workingcopy1\LISEZMOI.txt svn commit workingcopy1\LISEZMOI.txt --message "add a readme file"

svn delete workingcopy1\LISEZMOI.txt svn status workingcopy1\LISEZMOI.txt svn commit workingcopy1\LISEZMOI.txt --message "delete a readme file"

rem Renommer un fichier dans la copie de travail echo This is a readme file > workingcopy1\LISEZMOI.txt svn commit workingcopy1 --message "add a readme file"

svn rename workingcopy1\LISEZMOI.txt workingcopy1\README.txt svn status workingcopy1 svn commit workingcopy1 --message "add the readme file"

rem Modification d'un fichier dans la copie de travail echo Contributors: >> workingcopy1\README.txt type workingcopy1\README.txt rem par exemple, ajoutez votre nom des contributeurs dans le commentaire de la classe svn status workingcopy1\README.txt --verbose

Partager les modifications (commit) svn commit workingcopy1 --message "first modification"

rem Inspection des logs svn log workingcopy1 svn update workingcopy1 svn log workingcopy1

rem Editions concurrences svn update workingcopy1\README.txt rem modifiez le nom de l'auteur echo didier >> workingcopy1\README.txt type workingcopy1\README.txt svn update workingcopy1\README.txt rem modifiez le nom de l'auteur echo donsez >> workingcopy2\README.txt

svn status workingcopy1 svn status workingcopy2

svn commit workingcopy1 --message "second modification" svn commit workingcopy2 --message "second modification"

rem Traitement du conflit entre plusieurs rédacteurs par un "merge" manuellement svn update workingcopy2 dir workingcopy2 svn status workingcopy2\README.txt --verbose type workingcopy2\README.txt rem edit workingcopy2\README.txt echo This is a readme file > workingcopy2\README.txt echo Contributor: didier donsez > workingcopy2\README.txt del workingcopy2\README.txt.mine del workingcopy2\README.txt.r* svn resolved workingcopy2\README.txt svn commit workingcopy2 --message "third modification"

rem Revenir en arrière svn update workingcopy1 edit workingcopy1\src\test\java\demo\svn\AppTest.java svn status workingcopy1\src\test\java\demo\svn\AppTest.java svn diff workingcopy1\src\test\java\demo\svn\AppTest.java svn revert workingcopy1\src\test\java\demo\svn\AppTest.java

rem Récupérer une ancienne révision svn checkout workingcopy1 file:///c:/repository/hello@1

rem Création d'une autre copie de travail à partir de la révision 1 mkdir workingcopy3 svn checkout file:///c:/repository/hello workingcopy3 --revision 1

rem Checkout de l'autre copie de travail à partir de la dernière révision (HEAD) svn checkout file:///c:/repository/hello workingcopy2 --revision HEAD svn status workingcopy1

rem Ajout de propriétés svn propset foo "bar" workingcopy1 svn propset tic "tac toe" workingcopy1 svn propedit foo workingcopy1 svn propedit svn:ignore workingcopy1 svn propdel tic workingcopy1

rem Edition d'un log svn log workingcopy1 -r 1 svn propset svn:log 'initial import by Didier' -r1 --revprop file:///c:/repository/hello

echo initial import by Didier > log.r1.txt svnadmin setlog c:\repository -r1 log.r1.txt --bypass-hooks svn log workingcopy1 -r 1 del log.r1.txt

rem Ajout de svn:ignore svn propedit svn:ignore workingcopy1 rem ajoutez target .project .classpath svn propget svn:ignore workingcopy1 svn commit workingcopy1

cd workingcopy1 mvn clean install

rem Pose de verrou svn lock workingcopy1\pom.xml -m "Editing file for tomorrow's release." svn status workingcopy1 svn info workingcopy1\pom.xml

svn info file:///c:/repository/hello/pom.xml

rem Recherche et forcer les verrous svnadmin lslocks c:\repository svnadmin rmlocks c:\repository /hello/pom.xml svn info file:///c:/repository/hello/pom.xml

rem Lock/Modify/Unlock (à la RCS) svn lock workingcopy1\pom.xml -m "Editing file for tomorrow's release." edit workingcopy1\pom.xml svn unlock workingcopy1\pom.xml svn commit workingcopy1 svn info file:///c:/repository/hello/pom.xml

rem Ajout de mots clé substituables (Keyword substitution) echo $Id$ $HeadURL$ $Rev$ $Author$ $Date$ >> workingcopy1\README.txt type workingcopy1\README.txt rem Ajouter les appels aux mots clé $Id$ $HeadURL$ $Rev$ $Author$ $Date$ dans les commentaires svn propset svn:keywords "Id Rev HeadURL Date Author" workingcopy1\README.txt svn commit workingcopy1 svn update workingcopy1 type workingcopy1\README.txt

rem Création du layout trunk/tags/branches svn mkdir workingcopy1\trunk svn mkdir workingcopy1\branches svn mkdir workingcopy1\tags svn move workingcopy1\src workingcopy1\trunk svn move workingcopy1\target workingcopy1\trunk svn move workingcopy1\pom.xml workingcopy1\trunk svn commit workingcopy1

rem Création d'un tag 1.0 à partir de la revision HEAD svn copy file:///c:/repository/hello/trunk file:///c:/repository/hello/tags/release-1.0 -m "Tagging the 1.0 release of the 'hello' project." svn update workingcopy1

rem Création d'une branche java5 à partir de la revision HEAD svn copy file:///c:/repository/hello/trunk file:///c:/repository/hello/branches/java5 -m "Branching the java5 implementation of the 'hello' project." svn update workingcopy1 rem Modifiez le pom.xml selon http://java.developpez.com/faq/maven/?page=utilisation#compilation1 svn commit workingcopy1

rem switch

rem Inspection d'ancienne revision svn cat workingcopy1\pom.xml -r 1 svn blame workingcopy1\pom.xml -r 1

rem Création de patch svn diff workingcopy1 -r 1:2 > hello.r1-2.patch

rem Application d'un path TODO sous Unix ou sous CygWin, la commande patch TODO sous Windows, les commandes ExamDiff, KDiff3, WinMerge, Araxis compare

svn diff --diff-cmd /usr/bin/diff --extensions '-i' README.txt

rem Création d'un dump svnadmin dump repository > repository.svndump

rem Création d'un nouveau dépot partiel (utilisant FSFS) à partir du dump svndumpfilter include hello/trunk --drop-empty-revs --renumber-revs < repository.svndump > hello-trunk.svndump svnadmin create hellorepo --fs-type fsfs svnadmin load hellorepo < hello-trunk.svndump

rem Operations de maintenance svnadmin crashtest repository svnadmin recover repository

rem ======== rem svnserve rem lire http://tortoisesvn.net/docs/release/TortoiseSVN_fr/tsvn-serversetup-svnserve.html rem ========

rem Lancement svnserve comme un deamon edit repository\conf\svnserve.conf edit repository\conf\passwd edit repository\conf\authz

svnserve --deamon --root repository ^C

rem Lancement de svnserve comme un service NT (http://tortoisesvn.net/docs/nightly/TortoiseSVN_fr/tsvn-serversetup-svnserve.html) sc create svn binpath= "E:\devtools\svn-win32-1.4.4\bin\svnserve.exe --service --root G:\repository" displayname= "Subversion Server" depend= Tcpip start= auto sc query svn

rem Création d'une autre copie de travail mkdir workingcopy3 svn checkout svn://localhost/hello workingcopy3

rem Arrêt et Suppression du service NT svn sc stop svn sc delete svn

rem ======== rem svn via un tunnel SSH (svn+ssh) rem ======== rem Download and install Putty.zip

set PATH=%PATH%;c:\putty set PLINK_PROTOCOL=ssh set SVN_SSH=plink.exe

svn checkout svn+ssh://username@svn.forge.objectweb.org/svnroot/ecom

rem ======================= rem Apache v2 + mod_dav-svn rem =======================

TODO

rem Exporter un depot svn copy file:///c:/repository/hello/trunk trunk.export

rem ======================= rem Statistiques rem =======================

rem Telechargez et installez StatSVN http://wiki.statsvn.org/ rem Générez le rapport d'activité du projet

svn co svn://server/repo/trunk/modulename svn log -v --xml > logfile.log java -jar /path/to/statsvn.jar /path/to/module/logfile.log /path/to/module