Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/02/2010, à 12:24

Bismut

Sourceforge / Gestion SVN / Client RabbitVCS ou Eclipse ou RapidSVN

Bonjour,

Actuellement, j'ai un projet hébergé sur Sourceforge mais je n'utilise pas de VCS.
Je code avec Geany tout simplement.
En fait, le plus simple actuellement, c'est que je code directement dans le répertoire de l'application de dev : je code des extensions XUL (framework Mozilla) et donc je code direct dans "le profil de mon appli XulRunner".

Ca marche très bien mais j'aimerais essayer d'utiliser SVN que j'ai donc activé sur Sourceforge.

Depuis quelques temps, je lis énormément sur le sujet mais j'ai toujours un peu de mal à comprendre ce qu'il est possible de faire ou pas et comment cela fonctionne en pratique.

- Apparemment, le mieux est de créer /trunk, /branches et /tags dont j'ai bien compris le fonctionnement.
Mais peut-on faire sur un même projet, plusieurs sous-projets c'est-à-dire 3/4 répertoires contenant eux-même ces trunk, branches et tags ?

- Ensuite, j'imagine bien que côté serveur, tout cela est bien géré uniquement par des diffs pour ne pas à chaque fois copier l'intégralité de /trunk dans les /branches et /tags...
Mais côté de mon PC, ça se passe comment ? Est-ce transparent ? J'ai du mal à m'imaginer comment créer mon arborescence en local...

- Le serveur et ma copie locale sont-elles parfaitement symétriques ?
Je veux dire sur mon PC, j'ai un bout de code ici, un autre bout là... Puis-je ajouter tous ces petits bouts à mon projet assez finement et que ce soit bien géré côté serveur ? Ou bien dois-je obligatoirement avoir un gros dossier "Développement" pour que mon client SVN gère tout à sa sauce ?
Ce qui m'avait fait renoncé à une époque, c'est le fait que Eclipse ou SVN me créait plein de fichiers et dossiers cachés dans mon système local et que du coup, quand je packagais mon extension, j'avais tous ces dossiers parasites qui m'énervaient... du coup, j'ai préféré coder sous Geany sans SVN pour plus de simplicité.

- Comment gérer /trunk, /branches et /tags sur Sourceforge ?
Avec RabbitVCS, je n'arrive même pas à me connecter à mon SVN... Où faut-il renseigner son login/pass ? Quelle est l'adresse à utiliser ? Il faut bien faire un "Import" au début non ? et comment gérer les /trunk,... Faut-il passer par un client plus complet comme RapidSVN ?

- SVN gère /trunk, /branches et /tag avec seulement les différences entre fichiers pour gagner de l'espace disque.
Ayant un projet de base de données SQLite3, comment cela se passerait-il ? Pour des fichiers non textes, comment ça marche ? Est-ce qu'il archive vraiment et copie le fichier en entier ? Ou bien est-ce que le diff marche quand même, mais genre à un niveau plus bas avec des caractères forcément illisible ?
D'ailleurs, un VCS est-il un choix judicieux pour une base de données "collaborative" ? c'est une BDD que nous mettons à jour en local grâce à un client développé pour... il n'y a pas d'interface web. Donc actuellement, nous nous l'échangeaons par mail pour par IM... c'est un peu lourd. J'ai donc pensé à SVN pour gérer ça plus facilement, est-ce une bonne idée ?


Désolé pour ces gros pavés, et merci d'avance pour vos conseils éclairés, n'étant pas développeur de formation, j'apprends un peu sur le tas...


Mac Mini 2009 avec Archlinux
Asus EeePC S101 avec Archlinux
HTC Magic avec Android

Hors ligne

#2 Le 23/02/2010, à 12:53

valAa

Re : Sourceforge / Gestion SVN / Client RabbitVCS ou Eclipse ou RapidSVN

Salut,

Bismut a écrit :

- Apparemment, le mieux est de créer /trunk, /branches et /tags dont j'ai bien compris le fonctionnement.
Mais peut-on faire sur un même projet, plusieurs sous-projets c'est-à-dire 3/4 répertoires contenant eux-même ces trunk, branches et tags ?

Oui pas de soucis, il suffit de créer des dossiers distincts à la racine du dépôt qui contiendront chacun leurs dossiers trunk, branches, etc. Mais les numéros de révision seront alors communs à tous.

- Ensuite, j'imagine bien que côté serveur, tout cela est bien géré uniquement par des diffs pour ne pas à chaque fois copier l'intégralité de /trunk dans les /branches et /tags...
Mais côté de mon PC, ça se passe comment ? Est-ce transparent ? J'ai du mal à m'imaginer comment créer mon arborescence en local...

Du côté de ton PC, tu travailles sur une copie locale :
- tu rapatries (svn checkout) un projet ou une partie (en général le dossier trunk), à une révision donnée (en général HEAD, la plus récente) dans un dossier de ton PC, et tu fais tes modifs.
- à chaque instant, tu peux regarder ce que tu as modifié par rapport à la version restée sur le dépôt (svn diff)
- si vous êtes plusieurs à bosser ensemble, tu peux récupérer les modifs que d'autres ont faites entre temps sur le serveur (svn update). En cas de conflit (modifs effectuées sur le serveur portant sur les même lignes que modifs effectuées par toi en local), il faut résoudre le conflit.
- lorsque tu es prêt, tu envois tes modifs (de toute ta copie locale, ou d'un seule fichier, ou de plusieurs fichiers ou dossiers) sur le serveur (svn commit), créant ainsi une nouvelle révision du projet.
- à ce moment là, ta copie locale et la version sur lserveur sont synchronisée. Tu peux alors l'effacer, ou partir sur de nouvelles modifs.

- Le serveur et ma copie locale sont-elles parfaitement symétriques ?
Je veux dire sur mon PC, j'ai un bout de code ici, un autre bout là... Puis-je ajouter tous ces petits bouts à mon projet assez finement et que ce soit bien géré côté serveur ? Ou bien dois-je obligatoirement avoir un gros dossier "Développement" pour que mon client SVN gère tout à sa sauce ?

Lorsque tu crées ton projet, donc import de ton projet sur le serveur, tu peux l'importer bout par bout.
Ensuite lorsque tu rapatries une copie locale, tu n'es pas obligé de tout récupérer d'un coup : tu peux faire un checkout de seulement une partie du du projet. mais ce n'est pas une très bonne idée de l'éclater en plein de copies locales...
En général ce que l'on fait c'est rapatrier la partie sur laquelle on travaille (trunk, ou une branche). Si tu as besoin d'éclater ton projet dans une autre arborescence pour le tester, tu peux ensuite utiliser des liens symboliques.

Ce qui m'avait fait renoncé à une époque, c'est le fait que Eclipse ou SVN me créait plein de fichiers et dossiers cachés dans mon système local et que du coup, quand je packagais mon extension, j'avais tous ces dossiers parasites qui m'énervaient... du coup, j'ai préféré coder sous Geany sans SVN pour plus de simplicité.

Ces fichiers (dossiers cachés .svn partout dans l'arborescence) sont indispensable à une copie de travail pour savoir à quoi elle doit être comparée. Pour la distribution et le packaging, il suffit de rapatrier les sources avec la commande svn export plutôt que checkout. Le résultat obtenu est dépourvu des fichiers propres à SVN.

- Comment gérer /trunk, /branches et /tags sur Sourceforge ?
Avec RabbitVCS, je n'arrive même pas à me connecter à mon SVN... Où faut-il renseigner son login/pass ? Quelle est l'adresse à utiliser ? Il faut bien faire un "Import" au début non ? et comment gérer les /trunk,... Faut-il passer par un client plus complet comme RapidSVN ?

Je ne connais pas RabbitVCS, mais j'ai utilisé RapidSVN, qui est assez pratique. Avec RapidSVN tu peux gérer tes copies de travail, et aussi explorer directement le dépôt distant pour la création directe de dossier, branches, etc...
Après sache qu'il est assez facile d'utiliser SVN en ligne de commande.

- SVN gère /trunk, /branches et /tag avec seulement les différences entre fichiers pour gagner de l'espace disque.
Ayant un projet de base de données SQLite3, comment cela se passerait-il ? Pour des fichiers non textes, comment ça marche ? Est-ce qu'il archive vraiment et copie le fichier en entier ? Ou bien est-ce que le diff marche quand même, mais genre à un niveau plus bas avec des caractères forcément illisible ?
D'ailleurs, un VCS est-il un choix judicieux pour une base de données "collaborative" ? c'est une BDD que nous mettons à jour en local grâce à un client développé pour... il n'y a pas d'interface web. Donc actuellement, nous nous l'échangeaons par mail pour par IM... c'est un peu lourd. J'ai donc pensé à SVN pour gérer ça plus facilement, est-ce une bonne idée ?

Je ne pourrais malheureusement pas t'éclairer sur cette question, je sais que SVN est sensé gérer les diff binaires, mais je ne sais pas trop ce que ça donne en pratique, n'ayant pas essayé.

Dans tous les cas,
Je ne sais pas si tu maîtrise l'anglais, mais si c'est la cas je ne peux que te conseiller la lecture du svn book :
http://svnbook.red-bean.com/index.en.html
Il y a (ça doit être récent, je n'étais pas au courant) une version traduite en français ici : http://svnbook.red-bean.com/index.fr.html mais je ne sais pas si elle est complète.

En espérant avoir répondu à quelques unes de tes interrogations !

Dernière modification par valAa (Le 23/02/2010, à 13:01)

Hors ligne

#3 Le 24/02/2010, à 00:55

Bismut

Re : Sourceforge / Gestion SVN / Client RabbitVCS ou Eclipse ou RapidSVN

Tout d'abord, merci pour tes réponses. Concernant le livre sur SVN, je l'avais effectivement déjà récupéré et feuilleté.

Alors, j'ai installé RapidSVN et j'ai réussi à me connecter à mon SVN sur sourceforge, à créer une structure : Sous-projet/trunk, branches et tags.
J'ai même importé mes fichiers depuis mon extension XUL dans /trunk avec succès smile

...
Ajouté: /home/raph/.ylife project/ylife dev/rbcg95w8.default/extensions/ylifecore@ylife.fr/chrome/icons/default/deckbuilder_deckselector.ico
Ajouté: /home/raph/.ylife project/ylife dev/rbcg95w8.default/extensions/ylifecore@ylife.fr/chrome/icons/default/deckexportforums.ico
Mise à jour...
Prêt

Maintenant, je me pose quelques questions :

- Comment gérer les branches et les tags ? Je ne vois pas de "créer une branche", je suppose donc qu'il faut faire un bête "copier/coller" dans RapidSVN ? Et le serveur s'occupera de ne copier que les différences c'est bien ça ? Ou bien c'est plus complexe que ça ? D'ailleurs, comment s'effectue l'intégration d'une branche dans le trunk avec Rapid SVN ? Avec un copier/coller de manière transparente ? Ou par une action spéciale ?

- Ensuite, si jamais un fichier devient obsolète et que je le supprime en local depuis Nautilus puis commit... Est-ce que ça le supprimera aussi du serveur ? Ou faut-il manuellement le supprimer depuis RapidSVN ?

- Enfin, maintenant que mes fichiers sont sur le serveur SVN, je suppose qu'il faut que je fasse un "checkout" ? Je suppose que tout va être rappatrié dans un gros dossier alors qu'actuellement, mes morceaux de codes sont éparpillés puisqu'ils sont en production si je puis dire... Comment faire en sorte de les utiliser dans mes applications ?
Je n'y connais pas grand chose en lien symbolique mais si j'arrive à faire pointer un dossier vers l'endroit où il devrait être, ça fonctionnera pour tous les fichiers qu'il contient ?


Merci.

Dernière modification par Bismut (Le 24/02/2010, à 00:59)


Mac Mini 2009 avec Archlinux
Asus EeePC S101 avec Archlinux
HTC Magic avec Android

Hors ligne

#4 Le 24/02/2010, à 10:17

valAa

Re : Sourceforge / Gestion SVN / Client RabbitVCS ou Eclipse ou RapidSVN

Bonjour,

Bismut a écrit :

- Comment gérer les branches et les tags ? Je ne vois pas de "créer une branche", je suppose donc qu'il faut faire un bête "copier/coller" dans RapidSVN ? Et le serveur s'occupera de ne copier que les différences c'est bien ça ? Ou bien c'est plus complexe que ça ?

Contrairement à d'autres gestionnaires de versions, SVN ne connaît pas explicitement la notion de branches et de tags. Pour SVN, tout est dossier. Pour créer une nouvelle branche, il faut créer un nouveau dossier (de préférences dans le dossier branches), et y copier le trunk à une révision donnée. Cela peut se faire par la commande svn copy, ou avec rapidSVN en explorant le dépôt > clic droit > copy (ce qui reveint au même). Ce genre d'opération doit plutôt se faire directement sur le serveur plutôt que dans une copie locale.
Lorsqu'on fait ça, on ne fait pas exploser la taille du dépôt, car comme tu l'as compris svn ne copie que les différences entre les deux branches.

D'ailleurs, comment s'effectue l'intégration d'une branche dans le trunk avec Rapid SVN ? Avec un copier/coller de manière transparente ? Ou par une action spéciale ?

Pour réintégrer une branche dans le trunk (ou se tenir à jour des avancées du trunk dans une branche), il ne faut pas utiliser copy mais la commande svn merge, qui permet de fusionner proprement deux branches. Pour les détails je te renvoie au bouquin section "branching & merging", c'est vraiment bien expliqué (mais en anglais).

- Ensuite, si jamais un fichier devient obsolète et que je le supprime en local depuis Nautilus puis commit... Est-ce que ça le supprimera aussi du serveur ? Ou faut-il manuellement le supprimer depuis RapidSVN ?

Si tu supprimes un fichier de ta copie de travail, il ne sera pas automatiquement supprimé du serveur. rapidSVN te le marquera comme "missing" dans ta copie de travail. Tu peux alors le faire revenir s'il s'agissait d'une fausse manip (revert) ou alors le marquer comme "à supprimer" dans rapidSVN (clic droit > delete). Le fichier sera alors marqué comme à supprimer dans ta copie locale, mais ce n'est qu'au prochain commit qu'il sera effectivement supprimé du serveur (tout son historique reste disponible bien sûr !)
Pour ajouter un fichier c'est pareil : le nouveau fichier sera marqué comme "non versionné" dans rapidSVN. Tu l'ajoutes avec clic droit > add, et au prochain commit il sera importé sur le serveur.

- Enfin, maintenant que mes fichiers sont sur le serveur SVN, je suppose qu'il faut que je fasse un "checkout" ? Je suppose que tout va être rappatrié dans un gros dossier alors qu'actuellement, mes morceaux de codes sont éparpillés puisqu'ils sont en production si je puis dire... Comment faire en sorte de les utiliser dans mes applications ?
Je n'y connais pas grand chose en lien symbolique mais si j'arrive à faire pointer un dossier vers l'endroit où il devrait être, ça fonctionnera pour tous les fichiers qu'il contient ?

C'est bien avec des liens symboliques que je procède (je ne sais pas si c'est la meilleure méthode, mais c'est la plus pratique et souple que je connaisse). Et en effet, il suffit de faire un lien symbolique d'un dossier pour pouvoir pointer vers tous les fichiers dossiers qu'il contient. Du coup, il est bien dans ton projet de reproduire au maximum une arborescence proche de celle de production (nom des dossiers, etc...), cela limitera le nombre de liens à mettre en place.
Pour faire un lien symbolique graphiquement ça dépend de ton environnement, mais en console la commande

ln -s /dossier/source /dossier/destination/

marchera toujours (utilise plutôt un chemin absolu dans /dossier/source/, ou alors le chemin relatif à partir de /dossier/destination et pas à partir de ton dossier courant).

Hors ligne

#5 Le 25/02/2010, à 19:56

Bismut

Re : Sourceforge / Gestion SVN / Client RabbitVCS ou Eclipse ou RapidSVN

Re...

Merci de suivre mes premiers vrais pas avec SVN ^^ que je commence à sérieusement apprécier.

Donc j'ai créé une structure comme suit :
Sous-projet > trunk/branches/tags > Dossier qui contient tout (et qui sera la cible des liens symboliques une fois rappatrié comme copie locale)
Sous-projet > trunk/branches/tags > ...
...

Maintenant, j'hésite sur ce que je rappatrie au checkout :

Au début, je pensais au niveau du : Dossier qui contient tout
Plusieurs avantages :

+ Je ne récupère ponctuellement que la branche sur laquelle je veux travailler...

+ Comme le dossier a le même nom dans le trunk, les branches, et les tags, ça me permettrait de lancer n'importe quelle version de mon logiciel, n'importe quelle version de test... juste en récupérant celle qui va bien en 1 seul clic cool

Ma méthode te semble-t-elle viable et efficace ? Ou bien y-a-t-il des trucs et astuces de développeur qui me passent complétement au-dessus de la tête ou que j'aurais râté ?



Mais il me semble avoir lu quelque part que pour faire des copies branches > trunk, il fallait le faire en local puis committer... ce qui voudrait dire que je devrais rappatrier tout le sous-projet plutôt ? le trunk, toute les branches et tous les tags ?
Ou bien ai-je rêvé ?
Ce doit être possible de merger directement sur le serveur via RapidSVN non ?

Merci.


Mac Mini 2009 avec Archlinux
Asus EeePC S101 avec Archlinux
HTC Magic avec Android

Hors ligne

#6 Le 26/02/2010, à 20:36

valAa

Re : Sourceforge / Gestion SVN / Client RabbitVCS ou Eclipse ou RapidSVN

Salut !

Bismut a écrit :

Re...

Merci de suivre mes premiers vrais pas avec SVN ^^ que je commence à sérieusement apprécier.

Mais je t'en prie smile

Donc j'ai créé une structure comme suit :
Sous-projet > trunk/branches/tags > Dossier qui contient tout (et qui sera la cible des liens symboliques une fois rappatrié comme copie locale)
Sous-projet > trunk/branches/tags > ...
...

Maintenant, j'hésite sur ce que je rappatrie au checkout :

Au début, je pensais au niveau du : Dossier qui contient tout
Plusieurs avantages :

+ Je ne récupère ponctuellement que la branche sur laquelle je veux travailler...

+ Comme le dossier a le même nom dans le trunk, les branches, et les tags, ça me permettrait de lancer n'importe quelle version de mon logiciel, n'importe quelle version de test... juste en récupérant celle qui va bien en 1 seul clic cool

Ma méthode te semble-t-elle viable et efficace ? Ou bien y-a-t-il des trucs et astuces de développeur qui me passent complétement au-dessus de la tête ou que j'aurais râté ?

Ton fonctionnement me paraît tout à fait correct.

Mais il me semble avoir lu quelque part que pour faire des copies branches > trunk, il fallait le faire en local puis committer... ce qui voudrait dire que je devrais rappatrier tout le sous-projet plutôt ? le trunk, toute les branches et tous les tags ?
Ou bien ai-je rêvé ?
Ce doit être possible de merger directement sur le serveur via RapidSVN non ?

Merci.

Je ne sais pas où tu as lu ça, mais ce n'est pas ce qui est préconisé dans la bible (;)). Un merge se fait entre deux branches distantes, ou entre une copie locale et une branche distante, mais il n'y a pas vraiment d'intérêt à merger deux copies locales. Donc tu peux tout à fait le faire sur le serveur.
Et il ne sert donc à rien de rapatrier tout le projet : tu rapatries la branche dont tu as besoin, au moment où tu codes dessus, et puis c'est tout.

Bon week-end

Hors ligne