DevelVersionManagement



Subversion (SVN)


http://fr.wikipedia.org/wiki/Subversion_%28logiciel%29


Outil en mode texte

http://subversion.tigris.org

Interface graphique

http://tortoisesvn.tigris.org
http://esvn.umputun.com

Documentation

http://svnbook.red-bean.com


http://docs.codehaus.org/display/HAUS/How+to+Organize+a+Subversion+Repository
http://docs.codehaus.org/display/HAUS/How+to+Tag+and+Branch+a+Subversion+Repository


Mémento

D'après http://www.bonjourlesmouettes.org/index.php/2005/04

Création du repository


Pour créer un nouveau projet dans un repository existant, avec comme structure :

|
|- /
   |
   |- mon-appli/
	  |
	  |- trunk/
	  |- branches/
	  |- tags/

C'est l'arborescence typique d'un repository Subversion. S'il n'y a qu'une seule application dedans, les répertoires trunk/, branches/ et tags/ sont à la racine, soit :

|
|- /
   |
   |- trunk/
   |- branches/
   |- tags/


Le path vers le repository est donc de la forme : http://www.example.com/repository/mon-appli. La partie avant "mon-appli" est variable, et dépend du serveur (ce peut être un "serveur" local, donc avec une URL en file:///, ou bien un serveur WebDAV - HTTP, quoi -, avec une URL en http://, ou bien https:// si la connexion est encryptée en SSL). Voir avec le "fournisseur" du repository pour l'URL exacte.

On crée donc l'arborescence en local, mais pas son contenu. Le plus simple est de se placer dans un dossier vide, dont le nom et la position importe peu, qui représente la racine du repository. On a donc (dans le cas de la première arborescence présentée) :

|
|- /home/moi/
   |
   |- mon-appli/
	  |
	  |- trunk/
	  |- branches/
	  |- tags/


Dans le répertoire /home/moi/, on tape :

svn import . http://www.example.org/repository

NB: le . représente le répertoire local (comme d'hab', quoi).

Et voilà ! On efface ensuite l'arborescence (voilà pourquoi il ne fallait pas y mettre de fichiers ;) ), et on "check out" une "working copy" toute neuve là où on veut bosser dessus. Il est plus pratique de ne récupérer que le trunk/ (les autres répertoires servent rarement, et on peut de toutes façons "travailler" dessus comme on en a besoin par leurs seules URL).
Accès au repository - URL

Pour faire un "check out" d'une "working copy" (récupération d'une copie de travail) :

svn checkout http://www.example.org/repository/mon-appli/trunk

Ensuite, si on a des répertoires dans son arborescence de projet (dans le trunk/, par exemple) :

|
|- trunk/
   |
   |- tata/
   |- toto/
   |- tutu.txt



On peut accéder à n'importe lequel de ces répertoires (et en obtenir une "working copy" - copie de travail) par l'URL (pour l'exemple de toto/) :

svn checkout http://www.example.org/repository/mon-appli/trunk/toto##

Modifications sur les fichiers en local


Pour modifier le contenu d'un fichier : utiliser son éditeur de texte / graphique / nawak préféré.

Pour ajouter un fichier au repository (après l'avoir créé) :

svn add fichier

Pour supprimer un fichier (avant de le supprimer physiquement - en fait à la place, puisque Subversion s'en charge) :

svn delete fichier

Pour déplacer un fichier (mêmes conditions que pour supprimer) :

svn move depuis vers

Pour copier un fichier (mêmes conditions) :

svn copy depuis vers

Qu'est-ce que j'ai fait ?!

Pour savoir quelles modifications on a apportées à la "working copy" (avant de faire un commit) :
svn status

Cette commande renvoie une liste des fichiers modifiés dans le répertoire courant (ou dans le dossier spécifié à sa suite, ou bien encore un seul fichier si c'est le path d'un fichier qui a été donné), préfixés de signes plus ou moins cabalistiques :

* A : à ajouter au repository.
* C : en conflit (changement en local + changements en même temps sur le repository).
* D : à supprimer du repository.
* M : élément modifié.
* ? : élément non géré par Subversion.
* ! : élément absent (suppression d'un fichier sans svn delete, par exemple).
* I : élément ignoré par Subversion.

Pour faire un "diff" (format standardisé pour visualiser les changements ligne à ligne entre deux fichiers texte) :

svn diff
svn diff fichier
svn diff --revision 1:2 fichier

Dans l'ordre :
-
diff sur tout le répertoire.
-
diff sur le seul fichier (on peut aussi spécifier un répertoire à la place).
-
diff sur le seul fichier pour les révisions 1 et 2.

Pour annuler des changements, et revenir à la version du repository :

svn revert

On peut également passer un fichier ou un répertoire ou un numéro de version.

Mise à jour de la working copy

svn update

Attention !
svn update est différent de cvs update. La version CVS de la commande permet de voir quels sont les changements qui ont été apportés à la "working copy". Dans le monde de SVN, il faut utiliser svn status pour ça. svn update met à jour votre version locale par rapport au repository distant !


Opérations sur le dépôt

Récupérer une version de travail.

svn checkout url

Import initial.

svn import dossier

Créer un dossier.

svn mkdir dossier

Mise à jour de la version locale par rapport au dépôt.
svn update

Opérations sur les changements

Envoyer un ensemble de changements au dépôt.

svn commit

"Diff" entre deux fichiers ou deux révisions d'un fichier.

svn diff

Liste des changements (historique).

svn log

Fusion des changements entre deux versions, deux branches...

svn merge

Signaler la résolution d'un conflit.

svn resolved

Annuler les modifications sur un fichier/répertoire de la copie locale.

svn revert

Liste des changements entre la version locale et le dépôt.

svn status


Subversion derrière un proxy

Linux : éditer
~/.subversion/servers
Windows : éditer
%USERPROFILE%\Application Data\Subversion\servers

[global]
# http-proxy-exceptions = *.exception.com, www.internal-site.org
http-proxy-host = my.host.ip
http-proxy-port = my_port
http-proxy-username = my_user
http-proxy-password = my_password


voir aussi :
- MonSVN
- ObtenirLeCodeSource

There are no comments on this page. [Add comment]

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki