=======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