====== Premiers pas avec Subversion ======
Ceci est un modeste guide d'apprentissage qui vous apprendra à utiliser Subversion. Une fois mis en confiance, vous pourrez passer à une compréhension plus fine ; des ressources sont disponibles en fin d'article.
===== Pré-requis et préparatifs =====
subversion (!), gnupg, openssl et openssh doivent être installés.
Il faut définir l'éditeur qui permettra à Subversion de renseigner la description d'une modification ; pour ce faire, dans ''~./subversion/config'' indiquez votre éditeur favori et décommentez les **__//deux//__** lignes suivantes :
# [helpers]
# editor-cmd = editor (vi, emacs, scite, etc.)
===== Pour les membres du projet Nasgaïa =====
Le développement du projet est réalisé sur [[https://gna.org/projects/nasgaia|gna!]]. Pour un accès ssh au répertoire Subversion, il vous faut ouvrir un compte sur gna! et vous incrire au projet Nasgaïa :-). De plus, vous devrez déclarer une clef ssh.
=== Ouvrir un compte sur gna! ===
Créez votre compte via "New User via SSL" dans le menu.
=== Pour vous inscrire au projet Nasgaïa ===
* Une fois votre compte gna! créé, loguez-vous en utilisant le nom et mot de passe choisis lors de l'enregistrement, puis visitez la page "My Groups" du menu. Recherchez "nasgaia" dans "Request for inclusion".
* Une fenêtre apparaîtra dans laquelle vous devrez entrer un commentaire destiné à l'un des membres du Conseil Ethique qui validera (ou non) votre inscription.
* Enfin validez votre demande en cliquant sur "request inclusion".
=== Créer une clef ssh et l'enregistrer sur gna! ===
Tapez dans un shell :
ssh-keygen -t rsa
Une passphrase vous sera demandée qui seule sera acceptée pour authentification, et non votre mot de passe sur gna!. La clé publique sera placée dans ''~/.ssh/id_rsa.pub''. Vous devrez ensuite enregistrer votre clef publique via le fomulaire disponible à la page [[https://gna.org/account/editsshkeys.php|ssh keys]] ... puis attendre le passage de cron (toutes les heures) !
=== Pour les clés non standards ===
Si vous choisissez de ne pas nommer votre clé avec le nom par défaut (''id_rsa''), vous devez indiquer à subversion comment lancer ssh pour qu'il utilise cette clé. Avant de lancer la commande svn (ou dans votre fichier de profil du shell), tapez :
SVN_SSH="ssh -i /chemin_vers_votre_clé"
export SVN_SSH
Par exemple, si la clé se trouve dans ''$HOME/.mykeys/key_gna'' (pour la clé privée) et ''$HOME/.mykeys/key_gna.pub'' (pour la clé publique), cela vous donnera :
SVN_SSH="ssh -i $HOME/.mykeys/key_gna"
export SVN_SSH
===== Utilisation et description des principales commandes =====
La première abbréviation à connaître est **svn**, pour subversion. Entre parenthèses se trouve l'abbréviation ou nom court de la sous-commande.
Toutes les commandes doivent être lancées à partir de votre copie de travail, par exemple ''/home/toto/N/nasgaia''. Pour connaître les commandes, tapez :
svn help
Attention, **Utilisez toujours les commandes Subversion (svn copy, svn move, svn delete, ...) pour manipuler les fichiers et non celles du système (cp, mv, ...), sinon Subversion ne pourra pas suivre l'évolution de votre copie de travail. Mais, vous pouvez éditer tous vos fichiers avec l'outil de votre choix.**
=== checkout (co) ===
**checkout** télécharge en local une copie de travail du projet, un répertoire ''nasgaia'' sera créé ''/home/toto/N/nasgaia''. C'est la première chose à faire pour travailler sur un projet. si vous voulez donner un autre nom, comme ''depot'' dans un répertoire ''nasgaia'' existant, placez vous dans ce répertoire et faite le checkout en spécifiant ''depot'' à la place de ''nasgaia'' en dernier paramètre.
Toutes les commandes svn devront être éxecutées à partir de ce répertoire. Avec un accès anonyme, tapez :
svn co svn://svn.gna.org/svn/nasgaia/trunk nasgaia
ou avec le protocole http :
svn co http://svn.gna.org/svn/nasgaia/trunk nasgaia
accès via ssh (accessible aux seuls membres du projet) :
svn co svn+ssh://membername@svn.gna.org/svn/nasgaia/trunk nasgaia
astuce : il est utile de se créer un alias pour éviter de taper votre commande
==Qu'est ce que le répertoire .svn ??==
Chaque répertoire d'une copie de travail locale contient une zone d'administration, un sous-répertoire nommé ''.svn''. Quoi que vous fassiez ne le supprimez pas et ne le modifiez pas, il est nécessaire à Subversion pour gérer votre copie de travail.
=== update (up) ===
Récupére les dernières modifications des autres membres, à utiliser systématiquement avant toute modification :
svn up
=== add ===
Ajouter une ressource dans la liste des ressources qui appartiendront au référentiel. L'opération ne sera effective qu'au moment du commit. Le fichier doit exister avant de l'ajouter.
svn add fichier
=== delete (del, remove, rm) ===
Supprimer une ressource de la copie de travail avec effet immédiat sur celle-ci. Par contre, il faudra confirmer par commit cette modification pour modifier le référentiel.
svn del fichier
=== copy (cp) ===
Recopie une ressource d'un endroit du référentiel vers un autre endroit avec effet immédiat sur les ressources locales. Il faudra confirmer par commit cette modification pour modifer le référentiel. Pour copie le fichier dans le répertoire ''rep/''
svn cp fichier rep/
=== move (mv, rename, ren) ===
Déplace des ressources dans la copie de travail avec effet immédiat sur celle-ci. Par contre, il faudra confirmer par commit cette modification pour impacter le référentiel. Sert également à renommer une ressource. Pour renommer ''fichier1'' en ''fichier2'' :
svn mv fichier1 fichier2
déplacer fichier dans le répertoire rep/ :
svn move fichier rep/
=== status (stat, st) ===
Permet de savoir si vous avez des fichiers différents de ce qu'il y a dans le référentiel.
svn status
=== revert ===
Annule les modifications locales non encore commitées. Revenir sur la version du référentiel de fichier :
svn revert fichier
=== log ===
Suit l'évolution d'une ressource du référentiel ou de la copie de travail.
svn log fichier
=== commit (ci) ===
Confirme tous les changements effectués sur votre copie de travail et les envoie sur le référentiel.
svn commit
Quand vous commitez une modification, vous devez fournir un message la décrivant. Ce message sera attaché à la nouvelle révision créée. Un éditeur s'ouvre vous proposant de saisir un commentaire qui sera assigné à vos modifications.
--This line, and those below, will be ignored--
A fichier
Il faut alors saisir un commentaire au dessus de la ligne avec les deux tirets.
Je vais finalement aller me promener !
--This line, and those below, will be ignored--
A fichier
Après avoir sauvegardé et quitté l'éditeur, le commit sera effectivement effectué sur le référentiel. Si vous quittez l'éditeur sans sauver, Subversion vous demandera s'il faut quitter sans sauver (et ne pas commiter) ou s'il faut revenir à l'éditeur.
Si le message est court, vous pouvez utiliser l'option en ligne de commande --message (-m) :
svn commit --message "Trois, ... euh non 4 pizzas :)"
Troisième possibilité, le message peut aussi être fourni par un fichier, dans ce cas utilisez l'option -- file :
svn commit --file logmsg
===== Ressources =====
Voici de quoi approfondir vos connaissances :-)
* Le manuel officiel en anglais, [[http://svnbook.red-bean.com/|la référence]] !
* Un excellent [[http://toutprogrammer.com/article_19.html|tutoriel en français]], très utile !!
===== GUI =====
Ceux qui sont allergiques à la ligne de commande ou qui préfèrent simplement un frontend graphique peuvent utiliser
* [[http://rapidsvn.tigris.org/|RapidSVN]] (dépendance avec wxWidgets)
* [[http://www.smartcvs.com/smartsvn/index.html|SmartSVN]] (en java, et non libre, mais vraiment bien foutu)