=======SVN et CVS======= ====Creer un repositorie==== Creation d'un repositorie avec svn (dans /home/ctaf/svn) mkdir /home/ctaf/svn chmod 700 /home/ctaf/svn svnadmin create /home/ctaf/svn/repo ====Utilisation==== SVN et CVS permettent de travailler à plusieurs sur des fichiers.\\ Commandes de base: * checkout (co): recuppere tous les fichiers à partir du repositorie * update (up) : update notre repertoire local à partir du repositorie, n'écrase pas nos modifications en local * commit (ci) : envoie nos modifications local vers le repositorie * add : ajoute un fichier dans le systeme de controle de version * remove : supprime le fichiers du systeme de controle de version ===CVS=== #rapatrie les sources a partir du repo #checkout from IPSERVER with ssh export CVS_RSH=ssh export CVSROOT=ctaf@IPSERVER/home/ctaf/svn/repo cvs co #checkout en local export CVS_RSH=ssh export CVSROOT=ctaf@localhost/home/ctaf/svn/repo cvs co #add one file cvs add file #commit modification #upload modification on the svn serv cvs ci #update local file from repo #-d allow cvs to update directory too (dans le cas de nouveau dossier dans le repo) cvs up -d ===SVN=== Les fichiers sont stokés dans un dossier, qui pourra etre accédé par différentes methodes: * svn+ssh => svn lance une connection ssh et execute svnserve sur la machine distante pour recupérer les fichiers demandés * file => recupere les fichiers directement en local * svn => recupere les fichiers a partir un serveur svnserve. (svnserve est utilisé comme un daemon sur le serveur dans ce cas) #rapatrie les sources a partir du repo #checkout from IPSERVER with ssh svn co svn+ssh://ctaf@IPSERVER/home/ctaf/svn/repo #checkout en local svn co svn+ssh://ctaf@localhost/home/ctaf/svn/repo #checkout sans ssh ni svnserve comme client svn co file:///home/ctaf/svn/repo #add one file to svn svn add file #commit modification #upload modification on the svn serv svn ci #remove a conflict for a file (svn only) #for cvs, you need t edit the conflicted file svn resolved file #update local file from repo #-d allow cvs to update directory too svn up il est possible de passer un connection svn par un proxy(http/https) en utilisant le fichier .subversion/servers (le fichier contient les infos nécessaires) ====Creation d'un patch==== création d'un patch entre la version du repo et votre version local: cvs diff -u >mon_nouveau_patch.patch svn diff >mon_nouveau_patch.patch creation d'un patch sans whitespace, sans tab, sans saut de ligne: svn diff src/terminal.c --diff-cmd `which diff` -x "-w -E -u -B -b" ====Ssh advanced redirection==== Il s'agit d'utiliser le serveur ssh d'une machine qui n'est accessible que par une autre machine. Il en resulte l'utilisation d'un tunnel ssh. * IP_GATE est l'ip de la gate permettant l'accés a la machine qui contient le repo (la machine ac l'ip IP_REPO) * IP_REPO est l'ip de la machine sur laquel on souhaite acceder on repositorie Cette methode demande l'utilisation d'un petit script shell pour faire les redirections. Attention a ceux quil ait les droit d'execution et que $PATH contienne le repertoire dans lequel il se trouve. >cat sshe # !/bin/sh ssh -t IP_GATE ssh $1 #set new ssh tunnel and use it! export SVN_SSH="sshe" svn co svn+ssh://ctaf@IP_REPO/home/ctaf/svn/repo export CVS_RSH="sshe" export CVSROOT="ctaf@IP_REPO/home/ctaf/svn/repo" cvs co ====Gestion des utilisateurs==== Dans le but de restreindre l'accés a certain utilisateur, et surtout ne leur laisser que l'accés a CVS ou SVN, on utilise ssh. Avec ces restrictions l'utilisateur ne pourra pas avoir un shell sur votre compte par exemple, mais juste utiliser svn ou cvs. dans ~/.ssh/authorized_keys rajouter **command="/opt/subversion/bin/svnserve -t"** devant les clef des utilisateur n'ayant le droit d'utiliser que svn et **command="cvs server"** devant les clef n'ayant le droit de lancer que cvs. ex: command="svnserve -t" ssh-dss SSHKREYSDSKSKQSMQSDMDl ==== Branches ==== #create a branches: svn cp svn+ssh://server/svnroot/trunk svn+ssh://server/svnroot/branches/mybranch #switch between branch (to trunk): svn switch svn+ssh://server/svnroot/trunk #to mybranch svn switch svn+ssh://server/svnroot/branches/mybranch #change the url of a repository svn switch --relocate svn+ssh://server/previous/svnroot/trunk svn+ssh://server/new/svnroot/trunk