Openstuff Wiki : HowtoSVN

HomePage :: Categories :: PageIndex :: RecentChanges :: RecentlyCommented :: Login/Register

Revision [204]

Last edited on 2006-11-29 18:00:10 by StanKju
Additions:
Pour plus d'info, consulter le livre en ligne: [[http://svnbook.red-bean.com/ Version Control with Subversion]]


Revision [203]

Edited on 2006-11-29 17:57:39 by StanKju
Additions:
====5. Connexion distante====
Il existe deux moyens pour se connecter à distance à un repository :
~- Apache + mod_dav_svn
~- svnserve
L'authentification via svnserve peut utiliser des comptes système via une connexion SSH. Pour utiliser SSH avec svnserve il suffit que le client précise le schema ''svn+ssh'' dans l'URL:
$ svn checkout svn+ssh://stan@julien/home/stan/repositorySVN
Ici nous avons un compte ''stan'' sur la machine ''julien''. Pour info, la config svn se trouve dans le répertoire ".svn/" du référentiel :
$ ls .svn/
empty-file entries format prop-base props README.txt text-base tmp wcprops
$ grep "julien" .svn/entries
url="svn+ssh://stan@julien/home/stan/repositorySVN"


Revision [202]

Edited on 2006-11-29 16:20:15 by StanKju
Additions:
====4. Mise en place d'un Hook Scripts====
Il est possible avec Subversion d'exécuter des scripts automatiquement sur certains événements. On parle alors de "Hook Scripts".
Nous allons allons essayer d'envoyer automatiquement un mail à chaque nouvelle révision. Ce mail contiendra les différentes modifications. Pour ce faire nous allons utiliser la commande ''svnnotify''. Installons le package pour avoir cette commande:
$ sudo apt-get install libsvn-notify-perl
Puis mettons en place le "hook":
$ cd /home/stan/repositorySVN/hooks/
$ cat post-commit
#!/bin/bash
/usr/bin/svnnotify -r $2 -C -d -p $1 -t stan@localhost
$ chmod +x post-commit
Maintenant à chaque nouvelle révision je reçois un mail du type:
To: stan@localhost
Subject: [8] exploitadm.ftmms: youpiii
Status: RO
Revision: 8
Author: stan
Date: 2006-11-29 16:06:33 +0100 (Wed, 29 Nov 2006)
Log Message:
-----------
modification du fichier toto
Modified Paths:
--------------
toto.txt
Modified: toto.txt
--- toto.txt 2006-11-29 14:53:59 UTC (rev 7)
+++ toto.txt 2006-11-29 15:06:33 UTC (rev 8)
@@ -177,7 +177,6 @@
-dhcp15 A 192.168.5.94
dhcp16 A 192.168.5.95
dhcp17 A 192.168.5.96


Revision [199]

Edited on 2006-11-18 18:21:46 by StanKju
Additions:
Subversion stocke toutes les données des différentes versions dans un repository ou référentiel central. Pour le créer (aucun répertoire de ce nom doit exister):
Une fois que vous avez fait vos changements sur votre copie locale, il faut mettre à jour le référentiel. Ceci ce fait via un ''commit''
Par contre, la deuxième propagation ne pourra s'effectuer:
Cette fois-ci nous allons faire des modifications sur la même partie du fichier. Sur la première copie locale, je supprime une des lignes dans le fichier ''toto''.
Pour chaque fichier en conflit, Subversion crée trois copies différentes dans le répertoire de travail :
Une fois le fichier résolu (il ne faut plus qu'il y est de marqueurs), il faut lancer une commande particulière pour permettre à Subversion de savoir que le conflit est résolu. Ceci supprimera automatiquement les trois fichiers temporaires vus plus haut.
Deletions:
Subversion stocke toutes les données des différentes version dans un repository ou référentiel central. Pour le créer (aucun répertoire de ce nom doit exister):
Une fois que vous avez fait vos changements sur votre copie locale, il faut mettre a jour le référentiel. Ceci ce fait via un ''commit''
Par contre, la deuxiéme propagation ne pourra s'effectuer:
Cette fois-ci nous allons faire des modificationq sur la même partie du fichier. Sur la première copie locale, je supprime une des lignes dans le fichier ''toto''.
Pour chaque fichier en conflit, Subversion crée trois copieq différentes dans le répertoire de travail :
Une fois le fichier résolu (il ne faut plus qu'il y est de marqueurs), il faut lancer une commande particulière pour permettre à Subversion de savoir que le conflit est résolut. Ceci supprimera automatiquement les trois fichiers temporaires vus plus haut.


Revision [194]

Edited on 2006-09-16 12:53:49 by StanKju
Additions:
Subversion (ou SVN en abrégé) est un logiciel ""OpenSource"". C'est un système de contrôle de versions qui reprend les concepts de CVS. Il apporte de nombreuses nouveautés telles que :
====1. Création d'un référentiel====
Pour pouvoir utiliser un référentiel Subversion, la première chose a faire est un "checkout" qui consiste a récupérer la dernière version de l'arborescence. Ceci créera donc un répertoire local.
On voit un A apparaitre avec le fichier ajouté, ceci pour l'ensemble de l'arborescence. Voici l'explication des différents codes:
~-D - ressource supprimée (Delete)
En tapant cette commande vous êtes invité à saisir un message de propagation expliquant vos modifications. Une variable d'environement permet de choisir votre éditeur par défaut. Par exemple, pour utiliser ''vi'' :
~-svn diff : pour voir tous les changements intervenus entre la copie du référentiel et votre copie locale
~-svn diff -r5:6 file : pour voir les changements du fichier file entre la révision 5 et 6
~-svn revert file : annule les modifications apportées sur la copie locale
Oups ! Vous avez fait une erreur sur le fichier toto et vous souhaitez retrouver une ancienne version... Voyons déjà les différences :
Entre la révision 5 et la révision actuelle (7) la ligne ''test'' a été supprimée et deux lignes ont été ajoutées. Pour retrouver le fichier comme il était à la version 5 utilisons la commande ''merge'' :
Donc logiquement entre la version 5 et la révision actuelle (8) plus aucune différence ne doit exister sur le fichier toto :
~- les modifications des deux utilisateurs portent sur les mêmes éléments. Il y a chevauchement.
Une fois ceci fait nous allons pouvoir créer un conflit: modifier le même fichier sur les deux copies locales en modifiant des données différentes.
Par contre, la deuxiéme propagation ne pourra s'effectuer:
Regardons de plus près ... le fichier en question est obsolète: il se base sur la révision 10 alors qu'il devrait se baser sur la révision 11. Pour résoudre ce problème, il suffit donc de mettre à jour notre copie locale. Subversion s'occupera de faire la fusion (merge) tout seul.
Cette fois-ci nous allons faire des modificationq sur la même partie du fichier. Sur la première copie locale, je supprime une des lignes dans le fichier ''toto''.
Ici nous voyons qu'il y a un conflit que ne peut résoudre Subverison. Au mieux du ''G'' qui signifie ''merGe'' nous avons un ''C'' pour ''Conflict''. Il va falloir intervenir à la main.
Pour chaque fichier en conflit, Subversion crée trois copieq différentes dans le répertoire de travail :
~- fichier.mine: le fichier tel qu'il était avant la mise à jour
~- fichier.rNEWREV : le fichier reçu du référentiel
ma ligne modifiée
Le texte entre le premier et le second marqueur correspond aux modifications que nous venons de faire (ici ''ma ligne modifiée''). Entre le deuxième et le troisième, il s'agit de la modification faire sur la première copie locale (ici une ligne vide).
Une fois le fichier résolu (il ne faut plus qu'il y est de marqueurs), il faut lancer une commande particulière pour permettre à Subversion de savoir que le conflit est résolut. Ceci supprimera automatiquement les trois fichiers temporaires vus plus haut.
Deletions:
Subversion (ou SVN en abrégé) est un logiciel ""OpenSource"". C'est un système de contrôle de versions qui reprends les concepts de CVS. Il apporte de nombreuses nouvautés tel que :
====1. Creation d'un référentiel====
Pour pouvoir utiliser un référentiel Subversion, la première chose a faire est un "checkout" qui consiste a récuperer la dernière version de l'arborescence. Ceci créera donc un répertoire local.
On vois un A apparaitre avec le fichier ajouté, ceci pour l'ensemble de l'arborescence. Voici l'explication des différents code:
~-D - ressourece supprimée (Delete)
En tapant cette commande vous êtes invité a saisir un message de propagation expliquant vos modifications. Une variable d'environement permet de choisir votre éditeur par défaut. Par exemple, pour utiliser ''vi'' :
~-svn diff : pour voir tous les changement intervenu entre la copie du référentiel et votre copie locale
~-svn diff -r5:6 file : pour voir les changement du fichier file entre la révision 5 et 6
~-svn revert file : annule les modifications apportée sur la copie locale
Oups ! Vous avez fait une erreur sur le fichier toto et vous souhaitez retrouver une ancienne version... Voyons déja les différences :
Entre la révision 5 et la révision actuelle (7) la ligne ''test'' a été supprimée et deux lignes ont été ajoutées. Pour retrouver le fichier comme il etait à la version 5 utilisons la commande ''merge'' :
Donc logiquement entre la versions 5 et la révision actuelle (8) plus aucune différence ne doit exister sur le fichier toto :
~- les modifications des deux utilisateurs portent sur les même éléments. Il y a chevauchement.
Une fois ceci fait nous allons pouvoir créer un conflit: modifier le même fichier sur les deux copie locale en modifiant des données différentes.
Par contre la deuxieme propagation ne pourra s'effectuer:
Regardons de plus près ... le fichier en question est obsolète: il se base sur la révision 10 alors qu'il devrait se baser sur la révision 11. Pour résoudre se problème il suffit donc de mettre à jour notre copie locale. Subversion s'occupera de faire la fusion (merge) tout seul.
Cette fois ci nous allons faire des modification sur la même partie du fichier. Sur la première copie locale je supprime une des lignes dans le fichier ''toto''.
Ici nous voyons qu'il y a un conflit que ne peut résoudre Subverison. Au mieux du ''G'' qui signifie ''merGe'' nous avons un ''C'' pour ''Conflict''. Il va faloir intervenir à la main.
Pour chaque fichier en conflit, Subversion crée trois copie différenres dans le répertoire de travail :
~- fichier.mine: le fichier tel qu'il était avant la mise à jours
~- fichier.rNEWREV : le fichier reçus du référentiel
ma ligne modifié
Le texte entre le premier et le second marqueurs correspond aux modifications que nous venons de faire (ici ''ma ligne modifié''). Entre le deuxième et le troisième, il s'agit de la modification faire sur la première copie locale (ici une ligne vide).
Une fois le fichier résolut (il ne faut plus qu'il y est de marqueurs), il faut lancer une commande particulière pour permetre à Subversion de savoir que le conflit est résolut. Ceci permetra de supprimer automatiquement les trois fichiers temporaire vu plus haut.


Revision [181]

Edited on 2006-08-24 11:55:29 by StanKju
Additions:
$ svn status
Deletions:
svn status


Revision [180]

Edited on 2006-08-24 11:55:12 by StanKju
Additions:
$ vi toto
Deletions:
vi toto
vi toto


Revision [179]

Edited on 2006-08-24 11:54:06 by StanKju
Additions:
Nous allons voir maintenant ce qui se passe en cas de conflit. Pour cela nous allons prendre l'exemple d'un fichier modifié par deux personnes. Deux cas vont se présenter:
Deletions:
Nous allons voir maintenant ce qui se passe en cas de conflit. Pour cela nous allons l'exemple d'un fichier modifié par deux personnes. Deux cas vont se présenter:


Revision [178]

Edited on 2006-08-24 11:53:27 by StanKju
Additions:
Nous allons voir maintenant ce qui se passe en cas de conflit. Pour cela nous allons l'exemple d'un fichier modifié par deux personnes. Deux cas vont se présenter:
~- les modifications des deux utilisateurs portent sur des éléments disjoints du fichier. Il n'y a donc pas de chevauchement (overlap);
~- les modifications des deux utilisateurs portent sur les même éléments. Il y a chevauchement.
Pour pouvoir tester ceci, lancez deux shell, avec une copie locale sur chacun. Pensez a faire un ''svn update'' pour bien avoir la dernière version sur les deux arborescences.
==3.6.1 Conflit sans chevauchement==
Une fois ceci fait nous allons pouvoir créer un conflit: modifier le même fichier sur les deux copie locale en modifiant des données différentes.
La première propagation se passera normalement.
$ svn commit -m "modif 1er copie locale"
Envoi fichier
Révision 11 propagée.
Par contre la deuxieme propagation ne pourra s'effectuer:
$ svn commit -m "modif 2eme copie locale"
Envoi fichier
svn: Échec de la propagation (commit), détails :
svn: Le chemin 'fichier' est obsolète dans la transaction '11-1'
Regardons de plus près ... le fichier en question est obsolète: il se base sur la révision 10 alors qu'il devrait se baser sur la révision 11. Pour résoudre se problème il suffit donc de mettre à jour notre copie locale. Subversion s'occupera de faire la fusion (merge) tout seul.
svn status
? svn-commit.tmp
M fichier
$ svn up
G exploitadm.ftmms
Actualisé à la révision 11.
$ svn commit -m ""modif valide 2eme copie locale"
Envoi fichier
Transmission des données ..
Révision 12 propagée.
==3.6.2 Conflit avec chevauchement==
Cette fois ci nous allons faire des modification sur la même partie du fichier. Sur la première copie locale je supprime une des lignes dans le fichier ''toto''.
vi toto
$ svn commit -m "modif chevauchement copie locale 1"
Révision 14 propagée.
Sur la deuxième copie locale, je modifie la ligne supprimée dans la copie locale 1:
vi toto
$ svn commit -m "modif chevauchement copie locale 2"
svn: Échec de la propagation (commit), détails :
svn: Le chemin 'toto' est obsolète dans la transaction '14-1'
Comme tout à l'heure, il faut mettre à jour notre copie locale:
$ svn up
C toto
Actualisé à la révision 14.
Ici nous voyons qu'il y a un conflit que ne peut résoudre Subverison. Au mieux du ''G'' qui signifie ''merGe'' nous avons un ''C'' pour ''Conflict''. Il va faloir intervenir à la main.
Pour chaque fichier en conflit, Subversion crée trois copie différenres dans le répertoire de travail :
~- fichier.mine: le fichier tel qu'il était avant la mise à jours
~- fichier.rOLDREV : le fichier avant nos modifications
~- fichier.rNEWREV : le fichier reçus du référentiel
$ ls toto*
toto toto.mine toto.r13 toto.r14
Subversion ne nous laissera pas propager nos modifications sur le fichier toto tant que les trois fichiers temporaires ne seront pas supprimés. Subversion place également dans le fichier en conflit des marqueurs pour délimiter les zones en chevauchement :
<<<<<<< .mine
ma ligne modifié
=======
>>>>>>> .r14
Le texte entre le premier et le second marqueurs correspond aux modifications que nous venons de faire (ici ''ma ligne modifié''). Entre le deuxième et le troisième, il s'agit de la modification faire sur la première copie locale (ici une ligne vide).
Une fois le fichier résolut (il ne faut plus qu'il y est de marqueurs), il faut lancer une commande particulière pour permetre à Subversion de savoir que le conflit est résolut. Ceci permetra de supprimer automatiquement les trois fichiers temporaire vu plus haut.
$ svn resolved toto
Conflit sur 'toto' résolu
$ svn commit -m "modif chevauchement copie locale 2"
Révision 15 propagée.
Deletions:
TODO ...


Revision [177]

Edited on 2006-08-22 16:42:44 by StanKju
Additions:
Une fois que vous avez fait vos changements sur votre copie locale, il faut mettre a jour le référentiel. Ceci ce fait via un ''commit''
TODO ...
Deletions:
Une fois que vous avez fait vos changement sur votre copie locale, il faut mettre a jour le référentiel. Ceci ce fait via un ''commit''


Revision [176]

Edited on 2006-08-22 16:27:35 by StanKju
Additions:
~-svn blame file : pour savoir quel utilisateur a fait des modifications sur le fichier file
===3.5 Retour arrière===
Oups ! Vous avez fait une erreur sur le fichier toto et vous souhaitez retrouver une ancienne version... Voyons déja les différences :
$ svn diff -r5:HEAD toto
Index: toto
===================================================================
--- toto (révision 5)
+++ toto (révision 7)
@@ -1 +1,2 @@
-test
+test2
+sdfs
Entre la révision 5 et la révision actuelle (7) la ligne ''test'' a été supprimée et deux lignes ont été ajoutées. Pour retrouver le fichier comme il etait à la version 5 utilisons la commande ''merge'' :
$ svn merge -rHEAD:5 toto
U toto
Envoi toto
Révision 8 propagée.
Donc logiquement entre la versions 5 et la révision actuelle (8) plus aucune différence ne doit exister sur le fichier toto :
$ svn diff -r5:HEAD toto
$
Effectivement, c'est bien le résultat attendu.
===3.6 Résolution de conflit===
Deletions:
===3.5 Résolution de conflit===


Revision [175]

Edited on 2006-08-22 16:03:17 by StanKju
Additions:
Pour mettre a jour votre copie locale, une seule commande très simple :
$ svn update
À la révision 1
===3.2 Publication des données===
Deletions:
===3.2 Récupération des données===


Revision [173]

Edited on 2006-08-22 15:59:49 by StanKju
Additions:
Une fois que vous avez fait vos changement sur votre copie locale, il faut mettre a jour le référentiel. Ceci ce fait via un ''commit''
En tapant cette commande vous êtes invité a saisir un message de propagation expliquant vos modifications. Une variable d'environement permet de choisir votre éditeur par défaut. Par exemple, pour utiliser ''vi'' :
Deletions:
Une fois que vous avez fait vos changement sur votre copie locale, il faut mettre a jour le référentiel. Ceci ce fait via un 'commit'
En tapant cette commande vous êtes invité a saisir un message de propagation expliquant vos modifications. Une variable d'environement permet de choisir votre éditeur par défaut. Par exemple, pour utiliser 'vi' :


Revision [172]

Edited on 2006-08-22 15:58:55 by StanKju
Additions:
===3.1 Récupération des données===
===3.2 Récupération des données===
Une fois que vous avez fait vos changement sur votre copie locale, il faut mettre a jour le référentiel. Ceci ce fait via un 'commit'
$ svn commit
Envoi [...]
En tapant cette commande vous êtes invité a saisir un message de propagation expliquant vos modifications. Une variable d'environement permet de choisir votre éditeur par défaut. Par exemple, pour utiliser 'vi' :
export SVN_EDITOR=/usr/bin/vi
Il est également possible de passer le message de propagation en paramètre.
===3.3 Commande concernant les fichiers de l'arborescence===
===3.4 Commande sur les modifications===
~-svn status : liste des changements entre la version locale et le dépôt.
~-svn diff : pour voir tous les changement intervenu entre la copie du référentiel et votre copie locale
~-svn diff -r5:6 file : pour voir les changement du fichier file entre la révision 5 et 6
~-svn revert file : annule les modifications apportée sur la copie locale
~-svn log file : affiche les entrées du journal pour le fichier file
===3.5 Résolution de conflit===
Deletions:
===3.1. Récupération des données===
===3.2 Commande concernant les fichiers de l'arborescence===


Revision [171]

Edited on 2006-08-22 15:19:15 by StanKju
Additions:
===3.1. Récupération des données===
~-U - ressource mise à jour (Update)
~-A - ressource ajoutée au répertoire de travail (Add)
~-D - ressourece supprimée (Delete)
~-R - ressource remplacée (Replace)
~-G - ressource fusionnée (merGed)
~-C - ressource en conflit (Conflict)
A partir de la tout se fait avec la commande magique 'svn' :
$ svn help
usage : svn [options] [paramètres]
Client texte interactif de Subversion, version 1.3.1.
Entrer "svn help " pour l'aide sur une sous-commande.
La plupart des sous-commandes prennent en argument des répertoires et/ou
des fichiers, et s'appliquent récursivement sur les répertoires.
Si aucun argument n'est précisé à une telle sous-commande, elle s'applique
par défaut récursivement sur le répertoire courant, qui est inclus.
Sous-commandes disponibles :
add
blame (praise, annotate, ann)
cat
checkout (co)
cleanup
commit (ci)
copy (cp)
delete (del, remove, rm)
diff (di)
export
help (?, h)
import
info
list (ls)
lock
log
merge
mkdir
move (mv, rename, ren)
propdel (pdel, pd)
propedit (pedit, pe)
propget (pget, pg)
proplist (plist, pl)
propset (pset, ps)
resolved
revert
status (stat, st)
switch (sw)
unlock
update (up)
Subversion est un outil pour gérer des versions.
Pour plus d'informations, voir http://subversion.tigris.org/
===3.2 Commande concernant les fichiers de l'arborescence===
~-svn add fichier
~-svn delete fichier
~-svn copy fichier fichierCopie
~-svn move fichier fichierNouveau
Voici un exemple d'utilisation:
$ vi toto
$ svn add toto
A toto
$ svn commit --message "ajout fichier toto"
Ajout toto
Transmission des données .
Révision 2 propagée.
$ svn del toto
D toto
$ svn commit --message "suppression fichier toto"
Suppression toto
Révision 3 propagée.
Deletions:
-~U - ressource mise à jour (Update)
-~A - ressource ajoutée au répertoire de travail (Add)
-~D - ressourece supprimée (Delete)
-~R - ressource remplacée (Replace)
-~G - ressource fusionnée (merGed)
-~C - ressource en conflit (Conflict)


Revision [170]

Edited on 2006-08-22 15:04:26 by StanKju
Additions:
=====Utilisation de Subversion=====
Subversion (ou SVN en abrégé) est un logiciel ""OpenSource"". C'est un système de contrôle de versions qui reprends les concepts de CVS. Il apporte de nombreuses nouvautés tel que :
~- la gestion du renommage des fichiers
~- des commits (publications des modifications) véritablement atomiques. lorsqu'un commit est fait sur plusieurs ressources, il faut qu'elles soit toutes valide pour que la transaction est lieu.
Plus d'info sur [[http://fr.wikipedia.org/wiki/Subversion_%28logiciel%29 Wikipedia]]
====1. Creation d'un référentiel====
Subversion stocke toutes les données des différentes version dans un repository ou référentiel central. Pour le créer (aucun répertoire de ce nom doit exister):
%%
$ svnadmin create repositorySVN
$ ls repositorySVN/
conf dav db format hooks locks README.txt
%%
====2. Peuplement du référentiel====
Les fichiers que je veux gérer avec subversion sont dans le répertoire ""testSVN"". Je vais donc importer ces fichier dans le référentiel :
%%
$ cd testSVN/
$ svn import file:///home/stan/repositorySVN/ -m "import initial"
Ajout [...]
Révision 1 propagée.
%%
====3. Utilisation====
Pour pouvoir utiliser un référentiel Subversion, la première chose a faire est un "checkout" qui consiste a récuperer la dernière version de l'arborescence. Ceci créera donc un répertoire local.
%%
$ svn checkout file:///home/stan/repositorySVN/
A [...]
Révision 1 extraite.
%%
On vois un A apparaitre avec le fichier ajouté, ceci pour l'ensemble de l'arborescence. Voici l'explication des différents code:
-~U - ressource mise à jour (Update)
-~A - ressource ajoutée au répertoire de travail (Add)
-~D - ressourece supprimée (Delete)
-~R - ressource remplacée (Replace)
-~G - ressource fusionnée (merGed)
-~C - ressource en conflit (Conflict)
Deletions:
Incoming ...


Revision [168]

The oldest known version of this page was created on 2006-08-21 17:44:12 by StanKju
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki
Page was generated in 0.1051 seconds