Git n'est pas meilleur que Subversion. Mais ce n'est pas pire non plus. C'est différent.
La principale différence est qu'il est décentralisé. Imaginez que vous êtes un développeur sur la route, que vous développez sur votre ordinateur portable et que vous souhaitez avoir le contrôle des sources afin de pouvoir reculer de 3 heures.
Avec Subversion, vous avez un problème: le référentiel SVN peut être dans un endroit que vous ne pouvez pas atteindre (dans votre entreprise, et vous n'avez pas Internet pour le moment), vous ne pouvez pas vous engager. Si vous voulez faire une copie de votre code, vous devez littéralement le copier / coller.
Avec Git, vous n'avez pas ce problème. Votre copie locale est un référentiel et vous pouvez vous y engager et bénéficier de tous les avantages du contrôle de code source. Lorsque vous récupérez la connectivité au référentiel principal, vous pouvez vous engager contre.
Cela semble bon au début, mais gardez à l'esprit la complexité supplémentaire de cette approche.
Git semble être la chose "nouvelle, brillante et cool". Ce n'est en aucun cas mauvais (il y a une raison pour laquelle Linus l'a écrit pour le développement du noyau Linux), mais je pense que beaucoup de gens sautent dans le train "Distributed Source Control" juste parce qu'il est nouveau et écrit par Linus Torvalds, sans réellement savoir pourquoi / si c'est mieux.
Subversion a des problèmes, mais aussi Git, Mercurial, CVS, TFS ou autre.
Éditer: Donc, cette réponse a maintenant un an et génère toujours beaucoup de votes positifs, alors j'ai pensé ajouter quelques explications. Au cours de la dernière année depuis la rédaction de cet article, Git a gagné beaucoup d'élan et de soutien, en particulier depuis que des sites comme GitHub ont vraiment décollé. J'utilise à la fois Git et Subversion de nos jours et j'aimerais partager quelques idées personnelles.
Tout d'abord, Git peut être très déroutant au début lorsqu'il travaille de manière décentralisée. Qu'est-ce qu'une télécommande? et Comment configurer correctement le référentiel initial? sont deux questions qui se posent au début, en particulier par rapport au simple "svnadmin create" de SVN, "git init" de Git peut prendre les paramètres --bare et --shared qui semble être la "bonne" façon de mettre en place un système centralisé dépôt. Il y a des raisons à cela, mais cela ajoute de la complexité. La documentation de la commande "checkout" est très déroutante pour les personnes qui changent - la manière "correcte" semble être "git clone", tandis que "git checkout" semble changer de branche.
Git brille VRAIMENT lorsque vous êtes décentralisé. J'ai un serveur à la maison et un ordinateur portable sur la route, et SVN ne fonctionne tout simplement pas bien ici. Avec SVN, je ne peux pas avoir de contrôle de source local si je ne suis pas connecté au référentiel (Oui, je connais SVK ou les moyens de copier le dépôt). Avec Git, c'est de toute façon le mode par défaut. C'est une commande supplémentaire (git commit s'engage localement, alors que git push origin master pousse la branche master vers la télécommande nommée "origin").
Comme dit ci-dessus: Git ajoute de la complexité. Deux modes de création de référentiels, checkout vs clone, commit vs push ... Vous devez savoir quelles commandes fonctionnent localement et lesquelles fonctionnent avec "le serveur" (je suppose que la plupart des gens aiment toujours un "master-repository" central ).
De plus, l'outillage est encore insuffisant, au moins sous Windows. Oui, il existe un complément Visual Studio, mais j'utilise toujours git bash avec msysgit.
SVN a l'avantage qu'il est BEAUCOUP plus simple à apprendre: il y a votre référentiel, toutes les modifications apportées à celui-ci, si vous savez comment créer, valider et extraire et que vous êtes prêt à partir et pouvez ramasser des choses comme la ramification, la mise à jour, etc. plus tard sur.
Git a l'avantage qu'il est BEAUCOUP mieux adapté si certains développeurs ne sont pas toujours connectés au référentiel maître. De plus, c'est beaucoup plus rapide que SVN. Et d'après ce que j'entends, le support de branchement et de fusion est beaucoup mieux (ce qui est normal, car ce sont les principales raisons pour lesquelles il a été écrit).
Cela explique également pourquoi il gagne autant de buzz sur Internet, car Git est parfaitement adapté aux projets Open Source: il suffit de le fork, de valider vos modifications dans votre propre Fork, puis de demander au responsable du projet d'origine de retirer vos modifications. Avec Git, cela fonctionne. Vraiment, essayez-le sur Github, c'est magique.
Ce que je vois aussi, ce sont des ponts Git-SVN: le référentiel central est un dépôt Subversion, mais les développeurs travaillent localement avec Git et le pont pousse ensuite leurs modifications vers SVN.
Mais même avec ce long ajout, je reste fidèle à mon message principal: Git n'est ni meilleur ni pire, c'est juste différent. Si vous avez besoin de "Contrôle de source hors ligne" et la volonté de passer un peu plus de temps à l'apprendre, c'est fantastique. Mais si vous avez un contrôle de source strictement centralisé et / ou que vous avez du mal à introduire le contrôle de source en premier lieu parce que vos collègues ne sont pas intéressés, alors la simplicité et l'excellent outillage (au moins sur Windows) de SVN brillent.