09 décembre 2009

Pourquoi je préfére git à svn

J'utilise presque quotidiennement svn et git, et au fil de mon usage, ma préférence va son contestation vers git, Pourquoi ?

les répertoires .svn

Manipuler, déplacer ou renommer un répertoire dans une arborescence pose rapidement problème à partir du moment ou l'on ne valide (commit) pas chaque opération ! Copier des répertoires d'un repository à un autre ou isoler un répertoire en dehors de son arborescence de travail se fait naturellement avec git. Avec svn, il faut prendre soin de supprimer les répertoires .svn car en cas d'oubli c'est le bordel assuré...

Déplacer, copier, renommer

Toutes ces opérations à l'intérieur d'une arborescence de fichier nécessite de faire un "commit" dans un répertoire incluant la source et la destination. Dans le cas contraire, si on "commit" uniquement le répertoire source, le repository est certes correct mais le répertoire local de destination sera bancal. Il faudra nécessairement tout supprimer et refaire une mise à jour pour retrouver une version locale correcte. Pour éviter ce type de problème avec svn, l'idéal est de faire des commits à la racine de son projet. Ce qui n'est évidemment pas le cas avec git.

De plus, avant de déplacer, copier ou supprimer un fichier, il faut prendre soin de valider (commit) toutes les modifications locales faites sur ce fichier. Sinon svn bloquera la manipulation et si on passe en force on perdra automatiquement toutes les modifications. Ce type de problème n'existe pas avec git.

Branches et versions

Avec svn, les branches et les versions sont forcement partagés entre tous les utilisateurs du repository. Impossible donc d'avoir une branche personnel de travail, sauf à travailler hors de svn ou à ce mettre d'accord entre développeurs pour que personne ne modifie la branche sur laquelle on travaille.

Inconvénients d'un système centralisé

Bien sur svn a les inconvénients d'un système centralisé par opposition à un système décentralisé. Le principal problème est qu'un "commit" vaut "publication". Faire un commit s'est envoyer des données sur le serveur central et donc potentiellement partager ces modifications. Par conséquent, on valide (commit) uniquement quand on juge les modifications suffisamment avancés pour quelles soient grosso modo cohérentes et donc visibles par les autres développeurs. Avec git, la validation et la publication sont séparées, ce qui donne plus de souplesse au développeur.

Conclusion

D'accord git a d'autres inconvénients (les interfaces graphiques, son intégration difficile dans les explorateurs de fichiers, son utilisation sous windows, etc...). Cependant les problèmes décrits précédement touchent l'usage primaire que l'on peut avoir d'un gestionnaire version. Ce qui m'amène à penser que git foncièrement meilleur que svn.

Utiliser XPath en Javascript sur tous les navigateurs

Tous les navigateurs web proposent un moteur Javascript et une interface avec le Document Object Model. Malheureusement, comme d'habitude en pareil cas, le niveau de support des recommandations du W3C n'est pas le même pour tout le monde. Concrètement plus on veut utiliser des fonctionnalités avancées plus ça devient difficile et c'est ce qui ce passe quand on souhaite utiliser XPath.

Voici une petite sélection de liens proposant des solutions multi navigateurs pour utiliser XPath en javascript dans une page Web.