Subversion
De Linuxmemo.
Sommaire |
[modifier] Le client
[modifier] Commandes memo rapide
Première copie du site en local:
svn co url
url = file:///var/lib/svndepots/etc-svn/ ou svn://<your_ip>/<repository_name> ou http://<your_ip>/<repository_name> (avec apache le module dav_svn)
Mise a jour de la copie local:
svn update
Savoir ce qui a change:
svn log -r xxx -v fichier ou bien svn log -r xxx:xxxx -v fichier
Avoir le détail des changement diff:
svn diff -r xxx:xxx fichier
Afficher en fichier:
svn cat -r xxx:xxx fichier
Savoir ce qui a change sans toucher a la copie local:
svn log -v -r PREV:COMMITTED ou svn log -v -r xxx:COMMITTED
[modifier] Avoir de l'aide
Commandes
svn help svn help diff svn help up
Manuel de Subversion
http://svnbook.red-bean.com/nightly/en/svn-book.html
[modifier] Info sur le checkout local
Obtenir le statut des fichiers du checkout local
svn status
Obtenir des infos sur le checkout local (y compris sa révision)
svn info
Retrouver le chemin du repository
svnpath
[modifier] Consulter et rapatrier les modifications
Recevoir les modifications qui ont été committées dernièrement
svn up
Savoir qui a engendré chaque ligne d'un fichier
svn annotate svn blame svn praise
Voir le log des commits
svn log
[modifier] Gestion des modifications locales
Voir la différence entre votre checkout et le repository
svn diff svn diff
Configurer le comportement de svn diff
svn diff --diff-cmd /usr/bin/diff -x -ubB # patch unified ou les lignes blanches et caracteres vides sont ignorés
Retirer temporairement des modifications locales
svn diff > modifs.patch patch -p0 -R < modifs.patch [...faire des trucs sans les modifs, par exemple tester...] patch -p0 < modifs.patch
Annuler les modifications qu'on a faites dans un fichier
svn revert
Committer
svn ci -m "message" svn ci -m "message"
Committer avec un long message à entrer dans un éditeur
svn ci svn ci
Modifier un message de commit
svn propedit --revprop svn:log --revision
Résoudre un conflit, après avoir résolu dans le contenu du fichier lui-même
# après un svn update qui affiche des 'C' svn resolved # le 'C' ne doit plus apparaître devant le fichier résolu dans svn status
[modifier] Différences entre révisions
Voir la différence entre la version locale et une révision antérieure
svn diff -r
Voir la différence entre 2 révisions
svn diff -r :
Voir la différence entre 2 branches
svn diff
Revenir à une version antérieure (pour voir le code, pas pour committer en revertant)
svn update -r
Reverter à une version antérieure (pour committer et revenir à une ancienne version)
svn merge -r : . # committer les changements (en précisant les numéros de versions)
[modifier] Créer des branches ou tags
Créer une branche ou un tag en copiant le trunk du repository (committé directement)
svn cp $(svnpath)/trunk $(svnpath)/branches/ svn cp $(svnpath)/trunk $(svnpath)/tags/ svn cp $(svnpath)/trunk $(svnpath)/path/to/where/you/want
Créer une branche ou un tag à partir du répertoire local (sans committer directement)
svn cp . /path/to/where/you/want # committer
Plus d'infos
svn help cp
[modifier] Merge entre branches
Merger des changements d'une branche dans une autre
svn merge -r :\ # committer en notant les numéros de révision dans le message de commit # pour pouvoir remerger à partir de plus tard # NOTE: les tags doivent être donnés avec les url complètes du repository
Merger les changements entre 2 tags dans une branche
svn merge # NOTE: les tags doivent être donnés avec les url complètes du repository
Merger une branche dans le tronc
- Tout d'abord s'assurer que la branche et le tronc sont à jour, merger le tronc dans la branche.
- Lancer la commande suivante depuis le répertoire principal du tronc:
svn merge svn+ssh://.../project/trunk svn+ssh://.../project/branches/BRANCHNAME .
Création d'un repository
- Si tous les modules vont dans /home/runtime/SVN/, on peut créer un nouveau module 'foobar' avec
svnadmin create /home/runtime/SVN/foobar
- Pour travailler dessus, il faut ensuite le checkouter pour de vrai
svn checkout svn+ssh://dalton/home/runtime/SVN/foobar
[modifier] Subversion à travers un proxy
En fait, il faut éditer le fichier /.subversion/servers et mettre dans la section [global] :
[global] http-proxy-host=www.mon-proxy.truc #mettre le bon proxy http-proxy-port=3128 #mettre le bon port
Coté Serveur What if I'm behind a proxy?
The Subversion client can go through a proxy, if you configure it to do so. First, edit your "servers" configuration file to indicate which proxy to use. The files location depends on your operating system. On Linux or Unix it is located in the directory "~/.subversion". On Windows it is in "%APPDATA%\Subversion". (Try "echo %APPDATA%", note this is a hidden directory.)
There are comments in the file explaining what to do. If you don't have that file, get the latest Subversion client and run any command; this will cause the configuration directory and template files to be created.
Next, you need to make sure the proxy server itself supports all the HTTP methods Subversion uses. Some proxy servers do not support these methods by default: PROPFIND, REPORT, MERGE, MKACTIVITY, CHECKOUT. In general, solving this depends on the particular proxy software. For Squid, the config option is
# TAG: extension_methods # Squid only knows about standardized HTTP request methods. # You can add up to 20 additional "extension" methods here. # #Default: # none extension_methods REPORT MERGE MKACTIVITY CHECKOUT
(Squid 2.4 and later already knows about PROPFIND.)
See also "What are all the HTTP methods Subversion uses?" for advice on additional HTTP methods to allow through your proxy.
If it's difficult or impossible to get the proxy to allow Subversion traffic, but you want to check out the Subversion sources, you may be able to go around the proxy. Some proxies that filter port 80 nevertheless allow anything on port 81. For this reason, the svn.collab.net repository server listens on port 81 as well as on port 80. Try:
svn checkout http://svn.collab.net:81/repos/svn/trunk subversion
and maybe the proxy will let you through. Another strategy is to attempt the checkout over SSL, which many proxies allow:
svn checkout https://svn.collab.net/repos/svn/trunk subversion
Of course, your svn client will have to have been built with ssl support; just pass --with-ssl to Subversion's ./configure script. You can check to see whether the 'https' scheme is supported by running svn --version.
[modifier] Le serveur
[modifier] création d'un dépot
- Création du répertoire de base pour les futurs dépôts ("repository") est /var/svn
mkdir /var/svn
- créez un dépôt
svnadmin create /var/svn/projet1
- Création des utilisateurs
Editer les fichiers de configuration (pour choisir mot de passe et autres) dans le répertoire créé (nous considérerons le dépôt projet1). Dans le répertoire /var/svn/projet1/conf/ il faut éditer le fichier svnserve.conf avec au minimum :
[general] # Les utilisateurs non auth : none/read/write anon-access = none # Les utilisateurs auth : none/read/write auth-access = write # le fichier de password password-db = passwd # Cette option spécifie l'authentification du référentiel. # Si deux repo ont les mêmes référentiels d'authentification, # ils devraient avoir le même mot de passe de base de données, et vice versa. # Le domaine par défaut est le référentiel uuid. realm = projet1
- Editer le fichier passwd
[users] # nom = mot de passe joeuser = joepassword jayrandom = randomjay
(interdire l'accès en lecture à tout le monde)
- Lancer le serveur
svnserve -d -r /var/svn
- Automatiser le lancement de SVN
addgroup svn --system adduser svn --system --home /var/svn --no-create-home --ingroup svn chown -R svn: /var/svn
- script /etc/init.d/svnserve
#!/bin/sh set -e if [ -x /usr/bin/svnserve ] ; then HAVE_SVNSERVE=1 else echo "Svnserve not installed." exit 0 fi . /lib/lsb/init-functions case "$1" in start) log_action_begin_msg "Starting SVN server" /sbin/start-stop-daemon --start --chuid svn:svn --exec /usr/bin/svnserve -- -d -r /var/svn log_action_end_msg $? ;; stop) log_action_begin_msg "Stopping SVN server" /sbin/start-stop-daemon --stop --exec /usr/bin/svnserve log_action_end_msg $? ;; force-reload|restart) $0 stop $0 start ;; *) echo "Usage: /etc/init.d/svnserve {start|stop|restart|force-reload}" exit 1 ;; esac exit 0
chmod +x /etc/init.d/svnserve
- runlevel
update-rc.d svnserve defaults
[modifier] Utile
Garder l'historique des changements de /etc grâce aux outils de suivi de version (svn, svk)