< skateinmars> bon bah allez < gpocentek> go :) < skateinmars> (maître: gpocentek) << ok l'autre < gpocentek> :) < skateinmars> donc bonjour a tous (cad les 3 paumés) je vais être assez bref et donc passer pas mal de details, n'hesitez pas si vous avez des questions < skateinmars> on va donc voir d'abord rapidement comment utiliser svn, puis comment l'installer et monter un depot... < skateinmars> tout d'abord on va voir comment s'oganise un dépot svn traditionnel < skateinmars> un dépot svn est un peu comme un système de fichier, avec une racine et des sous répertoires, des fichiers etc < skateinmars> il est conseillé pour un projet versionné avec svn de créer 3 répertoires a la racine qui permettront d'organiser son travail < skateinmars> bref on va donc installer svn pour voir ca :) < skateinmars> sudo apt-get install subversion < skateinmars> quelqu'un a besoin d'installer ? :] < ePierre> nope :) < gpocentek> bon pour moi :) < skateinmars> ok on va donc commencer par lister la racine d'un projet typique < skateinmars> svn list http://htmlpurifier.org/svnroot/htmlpurifier/ < skateinmars> (htmlpurifier est un filtre xss pour php) < skateinmars> vous voyez donc les 3 répertoires de base ? < gpocentek> ouep < ePierre> oui < blackpegaz> oui < defcom> oui < skateinmars> nous apprendrons plus tard le role de ces 3 répertoires de base < ePierre> c'est ce que j'allais demander :) < skateinmars> pour le moment sachez que le répertoire trunk est le répertoire principal d'un projet, c'est celui ou le developpement se fait principalement < skateinmars> on va utiliser un repos que j'ai crée pour l'occasion pour tester :) < skateinmars> placez vous dans votre home ou dans un repertoire de test et tapez : < skateinmars> svn checkout http://skateinmars.net/svndemo/trunk svndemo < defcom> dir < skateinmars> c'est bon pour tous ? < ePierre> A svndemo/test < ePierre> Révision 2 extraite. < gpocentek> ya < defcom> oui < blackpegaz> oui < skateinmars> vous venez donc de recuperer la revision la plus recente du répertoire trunk/ de mon depot svn et l'avez placé dans le répertoire svndemo < skateinmars> c'est a ca que sert un svn checkout < skateinmars> notez que la majorité des commandes svn peuvent etre reduites, on aurait donc pu faire 'svn co' a la place < skateinmars> bref, placez vous dans le repertoire svndemo < skateinmars> j'y ai placé dedans un fichier test < skateinmars> (vous pouvez voir son contenu très original) < skateinmars> mais, j'ai fait une petite erreur dans ce fichier, et je viens de la corriger < skateinmars> mettez donc a jour votre dépot avec un "svn update" (ou "svn up") < skateinmars> dites moi quand c'est bon ou si vous avez pas compris :) < gpocentek> rev 3 \o/ < blackpegaz> ok < ePierre> à quoi correspond le A < defcom> bonsoir c'est mieux que bonjour a cette heure < ePierre> qui est un U (pour Update je suppose ?) < skateinmars> ePierre: ah oui :) < ePierre> Append ? < skateinmars> ePierre: A signifie un ajout, U une mise a jour < ePierre> ok < illovae> hello :) < skateinmars> il y a aussi D pour delete :) < ePierre> ok < skateinmars> voila donc la base de svn, avec ces 2 commandes vous pouvez suivre l'evolution d'un projet qui utilise svn < skateinmars> mais on va aussi voir comment vous pouvez vous meme faire des modifs et les transmettre < ePierre> ok < skateinmars> il me faut un volontaire, si gpocentek tu es motivé :] < gpocentek> yep < skateinmars> gpocentek: tu vas donc modifier le fichier test pour en changer le texte < gpocentek> done < skateinmars> une fois fait tu vas taper la commande "svn status" < skateinmars> et dis nous ce que tu vois < gpocentek> gauvain@joe:~/playground/svn/svndemo$ svn status < gpocentek> M test < skateinmars> svn status nous renseigne sur l'etat de note copie locale du dépot < skateinmars> *notre < ePierre> ok < skateinmars> ici on peut donc voir que le fichier test a été modifié < ePierre> donc y'a trois possibilités < skateinmars> ePierre: il y a encore des trucs en plus que l'on verra après :) < ePierre> soit il est modifié chez nous, soit il a été mis à jour sur le serveur, ou bien les deux < ePierre> ok < skateinmars> des fois on a fait des modifs sur un dépot svn, mais on ne peut pas envoyer les changements < skateinmars> par exemple nous ne sommes pas developpeurs sur le projet < skateinmars> pour tout de même faire partager ses modifs on va utiliser "svn diff" < skateinmars> gpocentek: :) < gpocentek> je paste < gpocentek> gauvain@joe:~/playground/svn/svndemo$ svn diff < gpocentek> Index: test < gpocentek> =================================================================== < gpocentek> --- test (revision 3) < gpocentek> +++ test (working copy) < gpocentek> @@ -1 +1,2 @@ < gpocentek> -bonsoir < gpocentek> +bonsoir la foule en délire < gpocentek> + < skateinmars> on peut donc voir qu'il y a eu un changement sur la ligne bonsoir, remplacée par 'bonsoir la foule en délire' < skateinmars> mais on va dire que M. gpocentek est développeur sur le projet < skateinmars> il va donc envoyer ses modifs directement sur le dépot < skateinmars> gpocentek: tu vas donc utiliser svn commit < skateinmars> cette commande va ouvrir un éditeur de texte ou vous devrez entrer un message de commit < gpocentek> test: déclaration plus précise < gpocentek> --This line, and those below, will be ignored-- < gpocentek> M test < gpocentek> y'a ça dans l'éditeur < gpocentek> (la première ligne est de moi) < skateinmars> ce message permettra aux autres utilisateurs du dépot a connaitre quels changements on été faits sans regarder toutes les modifs < gpocentek> gauvain@joe:~/playground/svn/svndemo$ svn commit < gpocentek> Sending test < gpocentek> Transmitting file data . < gpocentek> Committed revision 4. < skateinmars> (voila comme montre gpocentek sous vottre message de commit se trouve un apercu de toutes les modifs envoyées) < skateinmars> vous pouvez mettre a jour votre dépot :) < skateinmars> (votre copie locale pardon) < blackpegaz> c'est fait < ePierre> done < skateinmars> vous avez des questions sur cette opération ? < ePierre> non, c'est clair < defcom> non < ePierre> mais gpocentek a des droits particuliers, n'est-ce pas ? < illovae> moi j'ai une question un peu generale ? < ePierre> tout le monde ne peut pas commiter ? < skateinmars> ePierre: oui il n'y a pas tout le monde qui peut commiter librement d'habitude, et souvent il faudra utiliser un mot de passe mais la j'ai fait au plus simple :) < skateinmars> illovae: oui ? < gpocentek> illovae: parle mon petit ;) < ePierre> ok < illovae> je vois qu'on utilise svn avec du texte ici < illovae> est§ce que ca marche aussi avec des binaieres ? < illovae> binaires pardon < skateinmars> illovae: oui mais le diff ne marchera pas, le fichier mis a jour sera completement modifié < illovae> okay < skateinmars> (si ton binaire fait 5Mo il y aura donc 5Mo a telecharger a chaque changement sur le depot) < illovae> hum vaut mieux donc compiler en local quoi < skateinmars> illovae: oui en effet :) < illovae> merci :) < skateinmars> si c'est okay on va voir la suite des commandes possibles sur notre copie locale < gpocentek> ok < ePierre> ok < blackpegaz> ok < skateinmars> copiez un fichier texte quelquoncque dans votre répertoire de travail < illovae> ok < skateinmars> et executez svn status < gpocentek> gauvain@joe:~/playground/svn/svndemo$ svn status < gpocentek> ? foobar < skateinmars> vous voyez donc que svn a trouvé le fichier mais ne sais pas quoi en faire < gpocentek> (je paste pour avoir kekchose dans les logs ;) ) < skateinmars> on va l'ajouter, avec svn add nomdufichier < skateinmars> gpocentek: oui bonne idée :) < ePierre> ajouté < gpocentek> il lui faut absolument le nom de fichier apparemment (contrairement à bzr) < ePierre> il est ajouté à ton dépot ou bien il est ajouté à la liste des fichiers du projet ? < skateinmars> ePierre: il est ajouté a ta copie locale, au prochain svn commit il sera envoyé sur le dépot < ePierre> ok < ePierre> si j'avais pas ajouté le fichier, il serait pas envoyé meme s'il est sur le meme repertoire, c'est ça ? < skateinmars> gpocentek: oui mais si tu ajoute un répertoire il ajoutera aussi les sous repertoires < defcom> ok < skateinmars> ePierre: voila < ePierre> ok < gpocentek> skateinmars: ok < skateinmars> mais soudain, oh malheur, vous venez de voir que vous ne vouliez pas ajouter ce fichier encore, par exemple vous voulez encore le modifier jusqu'a avoir un fichier de qualité < skateinmars> pas de problemes, on va annuler ce qu'on a fait < skateinmars> entrez donc "svn revert nomdufichier" < gpocentek> gauvain@joe:~/playground/svn/svndemo$ svn revert foobar < gpocentek> Reverted 'foobar' < gpocentek> gauvain@joe:~/playground/svn/svndemo$ svn status < gpocentek> ? foobar < skateinmars> svn a gardé votre fichier mais ne le considère plus comme versionné < skateinmars> bien sur svn revert marche sur mes modifications d'un fichier deja existant < skateinmars> pour tester editez le fichier test, puis faites un svn revert dessus < gpocentek> gauvain@joe:~/playground/svn/svndemo$ vim test < gpocentek> gauvain@joe:~/playground/svn/svndemo$ svn status < gpocentek> ? foobar < gpocentek> M test < gpocentek> gauvain@joe:~/playground/svn/svndemo$ svn revert test < ePierre> cool < gpocentek> Reverted 'test' < gpocentek> gauvain@joe:~/playground/svn/svndemo$ svn status < gpocentek> ? foobar < skateinmars> vous verrez ainsi qu'il faut faire gaffe avec la commande revert < skateinmars> en effet vous venez de perdre toutes les modifs sur ce fichier < illovae> erf < skateinmars> faites donc attention a ne pas par inadvertance supprimer une journée de travail :) < ePierre> ok < skateinmars> pour la suite faites une mise a jour de votre dépot avec svn up < skateinmars> je viens d'ajouter le fichier plop < ePierre> et newfile < ipingu> Oups, c'est moi, je testais un peu :/ < ePierre> :) < skateinmars> =) < skateinmars> ipingu: pas grave c'est fait pour :) < ipingu> Un petit bac à sable (: < skateinmars> ca me permet de vous rappelez une règle importante quand on travaille a plusieurs : Faites toujours un svn up avant de commiter, au cas ou quelqu'un aurait fait des modifs importantes (on verra aussi les conflits apres) < skateinmars> bref, ce fichier newfile donc, n'est pas necessaire au projet :p < skateinmars> on va le supprimer < skateinmars> faites donc un "svn remove newfile" < ipingu> Je t'en prie )) < skateinmars> :) < gpocentek> ah ça fait un rm carrément, ça se contente pas de virer le fichier de la branche svn < ePierre> ah ouais < skateinmars> gpocentek: oui ca fait aussi un rm local mais un revert le ramene < gpocentek> cool :) < skateinmars> par contre je sais pas comment le retirer de la copie mais en gardant le fichier en local, a part avec un hack < skateinmars> enfin bref, le D dans votre modif signifie donc delete < skateinmars> on va aussi en profiter pour renommer le fichier plop < skateinmars> pour cela faites un svn move plop bloub < skateinmars> ou bloub est le 2e nom :) < skateinmars> pratique si vous voulez changer le nom d'une classe ou autre < ePierre> cool < ePierre> on peut utiliser mv je suppose ? < ePierre> à la place de move < skateinmars> oui :) < skateinmars> et rm pour remove < ePierre> ok < skateinmars> pour la suite je vais vous demander de faire un revert au cas ou sur votre fichier test, avant de le mofidier < skateinmars> modifiez la ligne bonsoir la foule en delire par autre chose, ce que vous voulez < skateinmars> un fois terminé faites un svn up et dites moi ce que vous voyez < ipingu> plusieurs version de test, test.r* < ePierre> C test < gpocentek> gauvain@joe:~/playground/svn/svndemo$ svn up < gpocentek> C test < gpocentek> Updated to revision 8. < ePierre> pareil, mais en francais < ePierre> :) < skateinmars> il y a donc un Conflit < gpocentek> gauvain@joe:~/playground/svn/svndemo$ ls < gpocentek> bloub test test.mine test.r7 test.r8 < skateinmars> quelqu'un a modifié la meme partie du fichier < ePierre> ohhhh < skateinmars> svn a detecté cela et vous donne donc plusieurs elements de comparaison < skateinmars> test.mine est votre fichier modifié < skateinmars> test.r8 celui de la révision 8, sans vos modifs < skateinmars> test.r7 celui de la revision précédente avant vos modifs et avant les modifs de la personne qui vient de commiter donc < ePierre> ok < skateinmars> dans le fichier test svn a essayé de comparer les fichiers pour reunir des modifs eventuellement faites chez les 2 personnes < skateinmars> vous pouvez voir ce fichier, personnellement je le trouve assez cryptique :> < ePierre> :) < skateinmars> <<<<<<< .mine < skateinmars> bonsoir la foule qui dort < skateinmars> ======= < skateinmars> bonsoir la foule qui marche < skateinmars> >>>>>>> .r8 < skateinmars> après <<<<<<< .mine on voit les modifs faites chez vous < ePierre> et à la suite, le reste du fichier qui n'a pas été modifié < ePierre> mais là on est plusieurs à modifier le meme fichier, plus de deux < skateinmars> et après les === et avant >>>>>>> .r8 les modifs faites par la deuxieme personne < skateinmars> ePierre: oui mais on fait comme si il n'y a que deux personnes qui commitent pour simplifier :) < ePierre> ok < skateinmars> vous pourriez donc si c'etait du code comparer les deux versions et reunir les modifs < skateinmars> ici on va dire que l'on va garder la derniere version (pas la votre donc :p ) < skateinmars> faites donc un < skateinmars> (pas avec svn) "mv test.r8 test" < ePierre> un editeur comme Eclipse permet de comparer et merger les modifs simplement < skateinmars> ePierre: en effet et même plus :] < skateinmars> on va aussi dire a svn que le conflit est terminé < skateinmars> pour cela faites un svn resolved test < skateinmars> vous verrez ainsi que les fichiers .mine et .r7 ont ete suppimés vu qu'il ne servaient plus a rien < skateinmars> (désolé pour les fautes d'orthographe au fait, jour de l'an tout ca... :) ) < skateinmars> des questions ici ? < gpocentek> non < ePierre> ok < ePierre> c'est clair < skateinmars> pour la suite < skateinmars> editez le fichier plop < ePierre> donc là < ePierre> on a le meme fichier que celui qui est sur le serveur ? < ePierre> le meme fichier test < skateinmars> ePierre: dans ce cas oui < skateinmars> ePierre: on pouvait aussi bien sur garder nos modifs a la place pour les commiter < skateinmars> ok ? < ePierre> ouais < ePierre> ouais < skateinmars> ok donc editez le fichier plop < ePierre> plop exoiste plus, on edite bloub ? < skateinmars> ePierre: ah oui < skateinmars> faites un revert sur bloub pour le renommer en plop :) < skateinmars> et editez donc plop :) < skateinmars> a la place de ok, sur la ligne ecrivez "ok monsieur" < ePierre> heu attends < ePierre> j'ai fait svn revert bloub < ePierre> mais ca n'a rien changé au fait qu'il est toujours bloub et pas plop < skateinmars> mmh en effet < gpocentek> (svn up -r 9) :p < skateinmars> il faut faire un svn revert plop et un svn revert bloub ou un svn remove bloub < skateinmars> dites moi quand c'est bon si vous etes pas trop embrouillés ^^ < ePierre> pierre@pierre:~/uclassroom/svndemo$ svn revert bloub < ePierre> 'bloub' omis < ePierre> pierre@pierre:~/uclassroom/svndemo$ svn remove bloub < ePierre> svn: Utiliser --force pour passer cette restriction < ePierre> svn: 'bloub' n'est pas versionné < skateinmars> ePierre: tu venais de le revert ? < skateinmars> oui voila donc tu peut le rm normalement < ePierre> ok < ePierre> j'ai modifié plop < skateinmars> vous avez tous ecrit "ok monsieur" a la place de "ok" ? < ePierre> oui < skateinmars> faites un svn up après < ipingu> me suis un peu emmelé ds les pinceaux avec ces reverts .. < ePierre> pierre@pierre:~/uclassroom/svndemo$ svn up < ePierre> C plop < ePierre> Actualisé à la révision 10. < gpocentek> hum < gpocentek> gauvain@joe:~/playground/svn/svndemo$ svn up < gpocentek> G plop < gpocentek> Updated to revision 10. < skateinmars> ipingu: oui désolé ^^' < skateinmars> ePierre: peut-etre un espace en trop ? < ePierre> qui a ajouté "d'accord", hein ? :D < ePierre> non < ePierre> pierre@pierre:~/uclassroom/svndemo$ cat plop < ePierre> <<<<<<< .mine < ePierre> ok monsieur < ePierre> ======= < ePierre> ok monsieur < ePierre> d'accord < ePierre> >>>>>>> .r10 < skateinmars> mmh en effet ^^' < skateinmars> bon va dire que tout s'est bien passé pour simplifier et prendre exemple sur gpocentek :) < skateinmars> (pas grave si c'est pas pareil pour tout le monde) < skateinmars> donc chez gpocentek on peut voir que le fichier a été mergé ( G ) < ePierre> ok < skateinmars> ca veut dire que les modifs locales etaient les memes que les modifs distantes < ePierre> ok < skateinmars> ca peut arriver parfois si vous avez récupéré sur une mailing-list un svn diff de quelqu'un qui a ensuite été incorporé dans le trunk < skateinmars> ok ? < gpocentek> ouep < ePierre> ouais < skateinmars> voila donc les commandes majeures a utiliser la plupart du temps < ePierre> ok < skateinmars> pour la suite donc, on va dire que notre application est une application web < skateinmars> vous avez envie sur une autre machine de récuperer cette appli pour la tester < skateinmars> mais il y a un detail qui cloche < skateinmars> regardez avec un "ls -a" votre répertoire < gpocentek> gauvain@joe:~/playground/svn/svndemo$ ls -a < gpocentek> . .. plop .svn test < gpocentek> gauvain@joe:~/playground/svn/svndemo$ ls -aF < gpocentek> ./ ../ plop .svn/ test < skateinmars> il y a un répertoire .svn dans votre répertoire (et chaque sous répertoire si il y en a) < skateinmars> ce répertoire est utilisé par svn pour comparer les modifs locales, etc... < skateinmars> on veut donc sur notre serveur de test que ca soit un peu plus propre < skateinmars> on ne va donc pas utiliser svn checkout < skateinmars> rendez vous donc dans un repertoire different, ou dans ~ par exemple < skateinmars> et utilisez svn export http://skateinmars.net/svndemo/trunk svndemop_production < skateinmars> (ou n'importe quel nom qui n'est pas utilisé a la place de svndemop_production ^^ ) < ePierre> fait < skateinmars> bref, vous obtenez un dossier svndemop_production avec dedans la derniere révision de trunk/ < ePierre> oui < skateinmars> on peut aussi utilisez export avant de créer un tarball par exemple pour une release < skateinmars> *utiliser < ePierre> export c'est comme checkout mais sans aucune info svn, c'est ça ? < skateinmars> ePierre: voila < ePierre> ok < skateinmars> pour la suite donc, on va dire que nous devons utiliser pour notre appli un fichier de configuration < skateinmars> par exemple des infos pour se connecter a la base de donnée < ePierre> oui < skateinmars> problème : sur chaque machine les infos seront potentiellement différentes < skateinmars> pas le même mot de passe, etc < skateinmars> il faudrait donc que tout le monde se trimballe un fichier qu'il doit faire attention a ne pas commiter a chaque fois < skateinmars> c'est un peu lourd mais heureusement il y a une autre solution < skateinmars> revenez dans votre repertoire svndemo < skateinmars> et tapez : svn propset svn:ignore config.php . < ePierre> j'ai pas de fichier config.php, c ést pas grave ? < ePierre> on inclut le . à la fin ? < skateinmars> ePierre: non pas grave du tout < skateinmars> oui le . est inclus < ePierre> ok < skateinmars> justement on va donc créer ensuite le fichier config.php et y mettre du texte < ePierre> pierre@pierre:~/uclassroom/svndemo$ svn propset svn:ignore config.php . < ePierre> Propriété 'svn:ignore' définie sur '.' < skateinmars> faites un svn status < skateinmars> (je vais trop vite ?) < ePierre> pierre@pierre:~/uclassroom/svndemo$ svn status < ePierre> ? style-pierre.css < ePierre> M . < ePierre> D newfile < ePierre> M plop < skateinmars> ok :) < skateinmars> on voit donc que notre fichier config.php n'est pas inclus dans la liste des fichiers modifies < ePierre> oui < skateinmars> par contre une modif est faite sur '.' < skateinmars> on vient donc d'utiliser la commande propset qui définit une popriété < ePierre> ok < skateinmars> il y a plusieurs propriétés différentes mais on va pas toutes les voir (perso je ne me sers quasiement que de svn:ignore :) ) < skateinmars> mais on va voir tout de même une autre propriété < skateinmars> et pour cela on va utiliser "svn propedit svn:externals ." < skateinmars> vous voyez que cela lance un éditeur < ePierre> nano < skateinmars> dans ce fichier, entrez la ligne suivante "purifier http://htmlpurifier.org/svnroot/htmlpurifier/trunk" < skateinmars> ePierre: ou autre si on change la variable d'environnement $EDITOR :) < ePierre> ok < skateinmars> après avoir entré cette ligne, sauvez le fichier et quittez l'editeur < ePierre> nom du fichier à ecrire < ePierre> svn-prop.tmp ? < skateinmars> ePierre: laisse le nom deja donné < skateinmars> ouaip < ePierre> ok < skateinmars> faites ensuite un "svn up" < skateinmars> et laissez un peu mouliner :) < ePierre> youhou < skateinmars> que se passe-t-il donc ? < ePierre> il recupere tous les fichiers du projet < skateinmars> on a utilisé svn:externals pour indiquer a svn que nous utilisons pour le dossier "purifier" une référence externe a un autre depot svn < ePierre> whooo pinaise < skateinmars> cela est utile si notre projet inclus un autre projet :) < skateinmars> quand vous aurez terminé un svn status montrera un "X" comme eXternal donc < skateinmars> voila rapidement comment utiliser les propriétés svn < skateinmars> bien sur avec un IDE comme eclipse vous avez une interface plus sympa pour les svn:ignore et autres :) < ePierre> ok < ePierre> un etit clic droit et hop < skateinmars> :) < skateinmars> des questions avant la suite ? < ePierre> nope < ePierre> tout va bien < gpocentek> ok pour moi < ipingu> de meme < illovae> ok < ipingu> peut etre une petite question juste < skateinmars> ipingu: vas-y < ipingu> que symbolise le "." en fin de ligne pour chaque propriété ? < ipingu> le dépot courant ? < skateinmars> cela veut dire qu'on applique la propriété sur le répertoire . < skateinmars> (le repertoire courant donc) < ipingu> uniquement le répertoire donc, ok < skateinmars> ah j'allais oublier, il y a une derniere commande a présenter avant de passer a la partie admin < skateinmars> quand votre projet atteint une version stable, comme 1.0, en plus de faire un svn export pour créer vos tarballs cela peut aussi etre interressant de garder une version svn "de coté" < skateinmars> on va donc utiliser les tags < ePierre> haaaa < ePierre> d'où le troisieme repertoire < ePierre> qui permet de tagger les modifs de chaque fichier < skateinmars> (ne faites pas la commande qui va suivre pour eviter les conflits :) ) < skateinmars> skateinmars@tauri:~/tests/svndemo% svn copy http://skateinmars.net/svndemo/trunk http://skateinmars.net/svndemo/tags/1.0 18:33 [0.01 - 15% 36%] < ePierre> pour pouvoir revenir dans une version antérieure < skateinmars> Révision 11 propagée. < skateinmars> ePierre: oui ou pour comparer deux versions < skateinmars> (faites pas attention au 18:33 [0.01 - 15% 36%] dans ma commande) < ePierre> ok, c'est pas toi qui l'a tapé ? < skateinmars> je viens donc d'utiliser svn copy, qui copie un fichier < skateinmars> ( ePierre non c'est mon shell :) ) < ePierre> ok < skateinmars> ici j'ai agit directement sur le depot en me servant des adresses web < ePierre> mais alors < ePierre> c'est une copie des fichiers ? < ePierre> donc si ton projet fait 5 Mo < ePierre> apres un copy il en fait 10 ? < skateinmars> ePierre: non car svn est intelligent :) il sait que la copie donne des fichiers identiques < ePierre> ok < ePierre> cool < skateinmars> bref, j'ai copié le trunk/ du dépot vers tags/1.0 < ePierre> ok < ePierre> et si tu veux revenir à cette version plus tard < skateinmars> un svn list http://skateinmars.net/svndemo/tags/1.0/ montre ainsi la version 1.0 < ePierre> ah... il suffit de regarder dedans ? < ePierre> ok < skateinmars> on pourra aussi faire un svn export http://skateinmars.net/svndemo/tags/1.0/ si on veut la recup, etc... < skateinmars> voila en gros l'utilité des tags < ePierre> ok < ePierre> cool < skateinmars> il reste encore les branches mais vu que je ne m'en suis jamais servi sur un projet je reste théorique :) < ePierre> je fais ca à l'ancienne à mon boulot :) < ePierre> ok < skateinmars> les branches sont un peu comme des tags < skateinmars> cad une version du trunk que l'on copie ailleurs a un moment donné < ePierre> ouais < ePierre> mais qui evolue dans son coin < ePierre> et apres il faut merger les modifs avec le trunk < ePierre> c'est un peu compliqué < skateinmars> l'interet est par exemple pour qu'un dev commence a faire des modifs sur une certaines partie du code mais ne veut pas toucher au trunk avant d'etre sur que ca marche < skateinmars> euh donc voila :) pas d'exemple désolé :p < illovae> hihi < skateinmars> (un svn copy sera utilisé pour créer la branche comme pour un tag) < skateinmars> des questions avant la partie admin ? < illovae> \o/ < skateinmars> gpocentek: ca arrive :) < skateinmars> bon si il y a pas de questions c'est parti :] < gpocentek> ROCK ON < ePierre> yeah < ePierre> on va voir quoi maintenant ? < skateinmars> contrairement a des systèmes de gestion de version distribués comme git ou bazaar, svn utilise un seul dépot < skateinmars> dans ce dépot se trouvera donc stockés toutes les versions < skateinmars> on va créer un dépot < skateinmars> pour cela, allez dans un autre répertoire de test < skateinmars> et utilisez svnadmin create depotdetest (ou depotdetest est le nom de votre dépot) < skateinmars> vous voyez donc apparaitre le répertoire depotdetest < skateinmars> conf/ dav/ db/ format hooks/ locks/ README.txt < ePierre> ouaip < skateinmars> comme vous pouvez le constater on ne touche pas trop directement au repertore du dépot :) < skateinmars> pour utiliser un dépot on a vu que l'on pouvait utiliser http si cetait disponible < skateinmars> ici on n'a pas encore configuré la chose, on va donc utiliser file:// < ePierre> ok < skateinmars> affichez donc les infos de votre dépot avec svn info file:///home/user/repdetest (avec le chemin correct bien sur :) ) < illovae> ok < skateinmars> vous voyez donc des infos diverses sur votre dépot < ePierre> ok < skateinmars> mais on n'a encore aucun répertoire dans le dépot < skateinmars> on va remedier a cel < skateinmars> *cela < skateinmars> faites un : < skateinmars> svn mkdir file:///home/skateinmars/tests/depotdetest/trunk file:///home/skateinmars/tests/depotdetest/tags file:///home/skateinmars/tests/depotdetest/branches -m "structure initiale" < skateinmars> en changeant bien sur les chemins :) < skateinmars> (mais en gardant trunk/ branches/ et tags/ ) < illovae> ouai < skateinmars> ok ? < illovae> ok < ePierre> Révision 1 propagée. < gpocentek> ok < ePierre> a priori, oui < skateinmars> on vient de voir également que l'on peut utiliser -m "message" pour éviter de lancer un éditeur pour taper son message de commit < skateinmars> cela peut servir dans un svn commit par exemple :) < skateinmars> faites a present un svn list file:///chemin/du/depot < illovae> nice < ePierre> :] < skateinmars> on pourra donc après faire un svn checkout etc :) < ePierre> ok < skateinmars> bon, c'est bien beau tout ca, mais a moins d'utiliser svn pour versionner des fichiers perso on va vouloir partager son depot < skateinmars> première solution par ssh < skateinmars> si vous avez ssh en local, faites un svn list svn+ssh://localhost/home/user/depot < ePierre> on doit taper ça ? < ePierre> svn+ssh ? < skateinmars> si tu as un ssh qui marche tu peut oui < illovae> ? < illovae> un server ? < illovae> ou juste un client ? < skateinmars> oui un server ssh en local < ePierre> hm < skateinmars> sinon c'est pas grave, le résultat est le même qu'un svn list file:// :) < illovae> okay < ePierre> bon j'ai pas de ssh < skateinmars> je ne connais pas du tout comment configurer ce moyen d'accès donc je n'en parlerais pas plus < skateinmars> passons plutot au moyen le plus souvent utilisé : http < skateinmars> ici il vous faudra apache sur votre machine locale < gpocentek> (ça marche nickel par ssh) < ePierre> ok < illovae> mince si j'avais su j'aurai fait ca sur ma machine server < ePierre> apache, j'ai < skateinmars> désolé si vous n'avez pas apache a disposition, il y a un autre moyen mais je ne le connais pas vraiment non plus ^^ < illovae> pas grave ^^ < skateinmars> illovae: tu peut toujours le faire il y a juste un svnadmin create a faire :) < illovae> bah je mpense que j'utiliserai plutot ssh pour ma part < gpocentek> (illovae: tu veux un ssh ici ?) < illovae> gpocentek: te casse pas la tete :) < skateinmars> donc avant de se tourner vers apache on va changer les droits sur notre dépot pour eviter les problemes < gpocentek> illovae: ok :) < skateinmars> faites donc un sudo chown www-data:www-data /chemin/vers/le/depot < skateinmars> ou www-data est l'utilisateur apache < gpocentek> -R ou pas ? < skateinmars> oui -R pardon < ePierre> sudo chown -R www-data:www-data ... ? < gpocentek> ePierre: oui < skateinmars> ePierre: après tu donne le chemin vers le depot, la ou tu as utilisé svnadmin create < ePierre> done < skateinmars> donc une fois cela fait, rendez-vous dans /etc/apache2/sites-available (pour apache 2 sur debian/ubuntu) < skateinmars> et editez le vhost sur lequel vous voulez mettre un svn < skateinmars> je ne vais pas vous expliquer les vhosts vu que c'etait le role d'un cours précédent :] < skateinmars> dans votre partie VirtualHost, ajoutez ceci : < skateinmars> http://paste.dunnewind.net/605 < illovae> hehe < gpocentek> skateinmars: tu peux paster ici pour le log ? < skateinmars> < skateinmars> DAV svn < skateinmars> SVNPath /var/partage/svn/demo < skateinmars> < gpocentek> m'ci :) < ePierre> heu.... < ePierre> je dois adapter quoi ? < ePierre> ca : /var/partage/svn/demo ? < illovae> ePierre: le path < ePierre> ok < skateinmars> oui ecrivez a la place le chemin vers le dépot < skateinmars> ensuite verifiez que le module dav_svn est bien actif avec un sudo a2enmod dav_svn < ePierre> hm... < ePierre> je rajoute ça entre les balises ? < ePierre> désolé j'avais pas suivi le cours precedent ;;^^ < gpocentek> libapache2-svn << à installer < skateinmars> ePierre: oui < skateinmars> merci gpocentek pour la precision :) < skateinmars> rechargez ensuite votre apache, sudo invoke-rc.d apache2 reload < skateinmars> et vous pouvez aller sur http://urlduvhost/svn < ePierre> donc j'ai changé le /var/... par /home/pierre/uclassroom/pierredepot ... j'ai bon ? < skateinmars> ePierre: oui nickel < illovae> ah pas mal le coup de invoke§rc.d < skateinmars> si vous voulez un exemple allez sur http://skateinmars.net/svndemo/ < gpocentek> http://gpocentek.homelinux.net/svn \o/ < illovae> nice < skateinmars> (illovae: euh oui je prefere a /etc/init.d/blabla :)) < illovae> :) < skateinmars> ePierre: dis moi quand c'est ok :) < ePierre> heu < ePierre> attends < skateinmars> pas de problemes < ePierre> ok bon < ePierre> en 127.0.1.1 ca marche < ePierre> /svn bien sur < ePierre> mais pas si j'entre mon adresse ip.... < skateinmars> c'est l'essentiel :) < ePierre> ah mais < ePierre> ouais bon < skateinmars> on continue donc ? < ePierre> ouais < skateinmars> ok < skateinmars> vous avez maintenant un depot svn dispo par http < ePierre> youhou ! < skateinmars> c'est sympa mais il y a un petit probleme < skateinmars> tout le monde peut y acceder en lecture comme en ecriture ! < skateinmars> on va poser quelques restrictions < ePierre> ok < skateinmars> pour cela j'utilise une technique avec un fichier d'accès (bien qu'on puisse s'en passer c'est utile car trac s'en sert aussi) < skateinmars> créez et editez donc un fichier nomdudepot.rules quelque part dans vos filesystem, par exemple dans le répertoire apache2/accessfiles < gpocentek> dans /etc/apache2/blabla ? < gpocentek> ou peu importe ? < skateinmars> gpocentek: dans /etc/apache2/accessfiles par exemple < gpocentek> ok < ePierre> j'ai pas de rep accessfiles... < ePierre> je le crée < skateinmars> peu importe mais quand on se retrouve avec 30 accessfiles on est un peu deg de pas avoir pensé a créer un repertoire accessfiles (c'est du vécu :> ) < ePierre> ok :D < skateinmars> dans ce répertoire mettez-y ceci : < skateinmars> [groups] < skateinmars> developpers = user < skateinmars> users= < skateinmars> [/] < skateinmars> @developpers = rw < skateinmars> @users = r < skateinmars> ( voir sur http://paste.dunnewind.net/607 ) < ePierre> c'est normal qu'il y ait deux p à developer? < illovae> ^^ < skateinmars> ePierre: euh non mais pas grave :) < ePierre> ok < illovae> hihi < skateinmars> donc ici en gros je crée deux groupes, un developpers et un users, avec pour le moment un seul utilisateur "user" (remplacez par votre nom d'utilisateur) < skateinmars> pour le répertoire / le groupe des devs peut lire et ecrire, et pour les users seulement lire < skateinmars> ensuite sauvez le fichier < skateinmars> puis créez un fichier htpasswd par exempe dans le même repertoire que accessfiles < skateinmars> appelez le par exemple nomdudepot.passwd < skateinmars> pour le créer : < skateinmars> sudo htpasswd -c nomdudepot.passwd nomduser < ipingu> [je vais devoir y aller, merci bcp pour ce cours skateinmars (:, bonne continuation à tous] < skateinmars> avec nomdudepot.passwd le fichier (chemin relatif ou absolu) et nomduser votre utilisateur que vous avez choisi < skateinmars> (bye ipingu merci :) ) < ePierre> ok, c'est fait < skateinmars> ok, changez ensuite la config du chost par ca : http://paste.dunnewind.net/606 < skateinmars> 1. < skateinmars> < skateinmars> 2. < skateinmars> DAV svn < skateinmars> 3. < skateinmars> SVNPath /chemin/vers/le/depot < skateinmars> 4. < skateinmars> < skateinmars> 5. < skateinmars> # Access control policy < skateinmars> 6. < skateinmars> AuthzSVNAccessFile /etc/apache2/accesfiles/svn_skateinmars.net.rules < skateinmars> 7. < skateinmars> < skateinmars> 8. < skateinmars> # only authenticated users may access the repository < skateinmars> 9. < skateinmars> Require valid-user < skateinmars> 10. < skateinmars> < skateinmars> 11. < skateinmars> AuthType Basic < skateinmars> 12. < skateinmars> AuthName "Mon depot SVN" < skateinmars> 13. < skateinmars> AuthUserFile /etc/apache2/accesfiles/mondepot.passwd < skateinmars> 14. < skateinmars> < skateinmars> 15. < skateinmars> Require valid-user < skateinmars> 16. < skateinmars> < skateinmars> 17. < skateinmars> < skateinmars> (woops :| ) < skateinmars> hum, bref pour AuthzSVNAccessFile utilisez le fichier nomdudepot.rules < illovae> ;) < skateinmars> et pour AuthUserFile le fichier créé avec htpasswd < ePierre> ok, ca devrait etre bon < ePierre> on reload ? < skateinmars> oui :) < ePierre> bon < ePierre> alors du coup < ePierre> on peut toujours y acceder en lecture, qui qu'on soitr < ePierre> ah bah non < ePierre> on me demande un passzd < ePierre> passwd < skateinmars> :] < ePierre> mais < ePierre> ca marche pas < skateinmars> ? < skateinmars> euh ouais je crois que je me suis un peu embrouillé mais ca devrait marcher < ePierre> Internal Server Error < ePierre> The server encountered an internal error or misconfiguration and was unable to complete your request. < ePierre> ah, damned < skateinmars> mmh en effet je crois qu'il faut activer plusieurs modules : auth_basic authz_default authz_groupfile et authz_user < ePierre> comment on active ça ? < skateinmars> avec a2enmod pour chaque nom de module : "sudo a2enmod authz_user" etc < ePierre> ok < ePierre> je peux les mettre tous en ligne ? < skateinmars> non < ePierre> sudo a2enmod authz_user auth_basic authz_default authz_groupfile < ePierre> zut < skateinmars> :] < ePierre> tout est déjà activé < skateinmars> grrmbl < ePierre> :( < skateinmars> tu vois un truc utile dans tes logs ? < ePierre> heu.... heu ? < skateinmars> euh ok en fait j'ai fait un peu n'importe quoi désolé < skateinmars> on va rechanger tout ca < ePierre> ok < skateinmars> reprenez le fichier .rules < skateinmars> sur la ligne après @users = r < skateinmars> ecrivez "* = r" < skateinmars> (sans les guillemets) < skateinmars> pour que tout le monde y ai accès en lecture < illovae> on vire pas users ? < ePierre> faut-il recharger quoi que ce soit ? < skateinmars> euh on peut oui < skateinmars> ePierre: attends ya d'autres modifs < ePierre> ok < skateinmars> ensuite, utiisez ce snippet la pour le vhost apache http://paste.dunnewind.net/608 < skateinmars> < skateinmars> DAV svn < skateinmars> SVNPath /var/partage/svn/demo < skateinmars> AuthzSVNAccessFile /etc/apache2/accesfiles/svn_skateinmars.net.rules < skateinmars> Satisfy Any < skateinmars> Require valid-user < skateinmars> AuthType Basic < skateinmars> AuthName "Subversion repository" < skateinmars> AuthUserFile /etc/apache2/accesfiles/svn_skateinmars.net.passwd < skateinmars> < skateinmars> avec donc AuthzSVNAccessFile et AuthUserFile vers les bons fichiers < skateinmars> et rechargez < skateinmars> ca devrait etre bon < skateinmars> (le AuthName est bien sur customisable) < skateinmars> c'est bon en lecture ? < ePierre> non < ePierre> il me demande un password < ePierre> je tape mon user et le password genere < skateinmars> ePierre: tu as rechargé ? < ePierre> et ca marche pas, je tombe sur un Internal server error < ePierre> sudo invoke-rc.d apache2 reload --> j'ai refait ca < skateinmars> ok < skateinmars> tu peut c/c les logs sur pastebin ? < skateinmars> gpocentek: illovae vous avez testé ? < ePierre> ouais < gpocentek> en cours < gpocentek> skateinmars: comment je change l'user dans le checkout ? < ePierre> ahhhh < gpocentek> svn checkout http://gauvain@192.168.1.3/svn << marche pô < ePierre> je crois que c'est ma faute < skateinmars> gpocentek: fais juste checkout http://192.168.1.3/svn il te le demandera si il en a besoin < skateinmars> la il devrait pas en avoir besoin pour le checkout, juste pour le commit < gpocentek> hum, j'ai un souci alors :) < skateinmars> ^^' dans ton .rules tu as bien mis * = r gpocentek ? < ePierre> ok ca marche ! youhou ! < gpocentek> arf, non < skateinmars> ePierre: cool, après teste un svn mkdir http://url/svn/trunk/test -m "test d'acces" < skateinmars> il devrait demander un passe < skateinmars> gpocentek: :] < ePierre> yeah !!!! < ePierre> ca fonctionne bien < gpocentek> boon bon bon < gpocentek> j'ai raté quelque chose < skateinmars> gpocentek: reprends le vhost apache :) fais gaffe j'ai pas le même Location dans le snippet < skateinmars> ePierre: ok cool :) < ePierre> on fait quoi maintenant ? < skateinmars> ben c'est fini :) < ePierre> haaaaa ! < ePierre> du coup je peux faire tout ce que je veux sur mon depot < skateinmars> ePierre: je pense qu'on a fait le tour a moins que tu aie une question :) < ePierre> mais comment ca se passe sur les projets lourds, du genre... gimp ou des gros projets du genre ? < skateinmars> ePierre: ben a peu près comme ca :) < gpocentek> svn: Échec de la requête PROPFIND sur '/svn' < gpocentek> mon vhost est bon pourtant < skateinmars> gpocentek: tu as bien le mod dav_svn et dav activés ? (ca devrait si c'etait bon tout a l'heure :| ) < ePierre> oui mais si on empeche l'acces à des gens qui veulent commiter des modifs ? < ePierre> il faut que ces gens demandent un accès, c'est ça ? < gpocentek> skateinmars: ouep < skateinmars> ePierre: oui, sur des projets comme kde il parait qu'ils donnent des accès assez facilement, sur d'autre on demande des diffs avant de faire ses preuves < ePierre> ok < skateinmars> gpocentek: :| tu as rien de bien dans les logs ? < ePierre> ha ok < ePierre> bon bah merci beaucoup pour cette formation < gpocentek> arf < gpocentek> une typo < skateinmars> de rien, désolé pour le petit désagrement ePierre ^^' < skateinmars> gpocentek: bah voila :p < ePierre> au contraire ! < ePierre> ya que comme ca qu'on apprend < skateinmars> :) c'est vrai < ePierre> je vais vous laisser car mon ventre crie FAAAAAAAAMINE ! < gpocentek> bon c'est pas encore ça mais ça avance... < ePierre> bonne soirée, et merci encore !!! < gpocentek> bye ePierre < gpocentek> skateinmars: j'arrête les logs ? < skateinmars> euh ouais :) < skateinmars> bye ePierre