Git ou SVN : des approches centralisées et décentralisées

Les outils de versionning ont pour mission de modifier des documents voire des fichiers. Ils sauvegardent dans une archive toutes les versions créées comprenant les horodatages ainsi que les identifiants uniques, de sorte que les anciennes données peuvent à tout moment être chargées voire restaurées. Par conséquent, le but est de déterminer l’identité de l’utilisateur qui a procédé à des modifications à un moment T. Les objectifs d’un tel système sont, d’un côté, de coordonner l’accès commun de plusieurs utilisateurs à des fichiers et, de l’autre, de permettre le développement simultané de plusieurs branches (celle du développement ou bien du détachement).

En règle générale, les systèmes de versionning interviennent dans le développement de logiciels et dans les systèmes de gestion de contenus dans le cadre professionnel. On compte, dans les outils de versionning les plus connus, Apache Subversion (SVN) mais également Git. Il est possible de les installer soit sur son propre serveur soit de les louer via un hébergeur. GitHub est le service d’hébergement basé sur le web le plus connu pour les projets Git. En ce qui concerne Subversion, on peut citer le site RiouxSVN. Les services tels que SourceForge hébergent les deux systèmes.

SVN : le successeur CVS de CollabNet

C’est au début des années 2000 que le logiciel libre Subversion a commencé son développement pour enfin sortir sa version complète quatre années plus tard. C’est ainsi que DVN a succédé à son modèle CVS (sigle de Concurrent Versions System). En 2009, le projet a changé pour la Apache sofware Foundation, d’où provient le nom du fameux outil Apache Subversion.

SVN repose sur un système de versionning centralisé. Cela signifie qu’un seul répertoire général existe et tous les utilisateurs y ont accès. Etant donné que les modifications ne peuvent être fusionnées, le système empêche que deux utilisateurs modifient un même fichier simultanément. Ce dernier est attribué au premier internaute qui l’ouvre et il reste protégé des autres utilisateurs tant qu’il n’a pas été fermé. Apache Subversion permet également de charger et de modifier les sous-chemins indépendamment du reste de l’arborescence. C’est ainsi que les droits de lecture et d’écriture sont affectés pour la totalité des chemins aux différents utilisateurs. En outre, Suversion se caractérise par le fait que des répertoires vides, renommés voire déplacés peuvent être enregistrés sans causer de perte dans l’historique.

Git : la solution d’urgence du développeur du noyau Linux

Le créateur de Linux Linus Thorvalds a commencé le développement d’un nouveau logiciel de versionning en avril 2005. Il y était plus ou moins forcé. La raison de ce rebondissement était que les développeurs du noyau Linux avaient perdu leur accès gratuit du fait d’une modification de la licence du système BitKeeper. Le nouveau système avait pour but de présenter les même flux de travail que BitKeeper et de protéger contre les modifications délibérées ou accidentelles. Par ailleurs, son efficacité était bien supérieure. C’est seulement après seulement quelques jours que Thorvalds présentait la première version de Git.

Derrière Git se cache un système de versionning décentralisé. Il existe un dépôt (de l’anglais repository) dans lequel tous les changements sont incorporés et qui permet aux utilisateurs d’y télécharger leurs propres copies de travail. Ils disposent également d’un dépôt complet qui comprend l’historique local sans qu’ils n’aient besoin d’une connexion permanente au réseau. Par ailleurs, les modifications sont transférées rapidement dans le dépôt principal. En conséquence, Git ne propose pas de système de verrouillage mais permet à tous les utilisateurs de créer leurs propres branches qui seront ensuite téléchargées dans le dépôt principal. Chaque utilisateur dispose par ailleurs des droits de lecture et d’écriture standards pour tout le répertoire. S’il existe d’autres droits, d’autres répertoires principaux doivent alors être définis. Chaque copie de travail est une sauvegarde individuelle du répertoire principal, ce qui présente un avantage au cas où celui-ci tombe en panne ou est abîmé. Git ne définit que les contenus des répertoires, c’est pourquoi les répertoires vides sont automatiquement supprimés.

SVN et Git : comparaison directe des systèmes

Quel outil faut-il choisir entre SVN et Git ? La réponse n’est pas aussi simple et reste liée à vos objectifs. Les deux systèmes se distinguent de par leurs structures et leurs procédures de travail. Le tableau suivant illustre les oppositions majeures qui existent entre les deux outils :

SVNGit
VersionningCentraliséDécentralisé
DépôtUn dépôt central dans lequel les copies de travail sont créées Des copies de dépôt, présentes localement, dans lesquelles il est possible de travailler
Droit d’accèsBasé sur le cheminPour le répertoire complet
Suivi des modificationsEnregistre des donnéesEnregistre des données
Journal de modifications des donnéesComplet seulement dans le dépôt. Les copies de travail ne contiennent que la version la plus récente.Le dépôt et les copies de travail contiennent l’historique complet.
Connectivité au réseauPour tous les accèsNécessaire seulement pour réaliser une synchronisation

Voici les avantages respectifs des deux systèmes :

Il se peut que Git vous corresponde mieux si vous…

  • Ÿn’avez pas besoin d’une connectivité au réseau de manière continue par exemple pour pouvoir travailler sur votre projet de n’importe où ;
  • Ÿvoulez être protégé en cas de panne ou de perte du dépôt principal ;
  • Ÿn’avez besoin en aucun cas de droits de lecture ou d’écriture pour des répertoires particuliers (il est tout de même possible avec Git, quoique compliqué, de configurer ces accès) ;
  • Ÿattachez beaucoup d’importance au transfert rapide des modifications.

Mais Subversion peut se révéler être une meilleure option si vous…

  • Ÿavez besoin de droits d’accès basés sur des chemins pour chaque domaine de votre projet ;
  • Ÿdésirez regrouper tout votre travail dans un endroit centralisé ;
  • Ÿtravaillez avec beaucoup de fichiers binaires ;
  • Ÿdésirez enregistrer complètement les structures des répertoires vides (Git n’autorise pas cette action étant donné qu’il ne possède aucun contenu).

Si les caractéristiques énumérées ci-dessus ne sont pas pertinentes pour votre projet, nous vous conseillons de procéder à un test des deux outils de versionning. Quoi qu’il en soit, GitHub est le premier fournisseur d’hébergement et il est soutenu par une grande communauté d’utilisateurs ce qui forme en soi un avantage majeur.