than - svn vs git merge




Pourquoi Git est-il meilleur que Subversion? (20)

" Pourquoi Git est meilleur que X " décrit les différents avantages et inconvénients de Git par rapport aux autres SCM.

Brièvement:

  • Git suit le contenu plutôt que les fichiers
  • Les branches sont légères et la fusion est facile , et je veux dire très facile .
  • Il est distribué, chaque référentiel est une branche. Il est beaucoup plus facile de développer simultanément et en collaboration qu'avec Subversion, à mon avis. Cela rend également possible le développement hors ligne .
  • Cela n'impose aucun flux de travail , comme on peut le voir sur le site Web lié ci-dessus , il existe de nombreux flux de travail possibles avec Git. Un flux de travail de style Subversion est facilement imité.
  • Les dépôts Git sont beaucoup plus petits en taille de fichier que les dépôts Subversion. Il n’existe qu’un seul répertoire ".git", par opposition à des dizaines de référentiels ".svn" (remarque: Subversion 1.7 et versions ultérieures utilisent désormais un seul répertoire comme Git.)
  • La zone de préparation est géniale, elle vous permet de voir les modifications que vous allez valider, de valider des modifications partielles et de faire diverses autres choses.
  • Stashing est inestimable lorsque vous effectuez un développement "chaotique" ou que vous souhaitez simplement corriger un bogue pendant que vous travaillez encore sur autre chose (sur une autre branche).
  • Vous pouvez réécrire l'historique , ce qui est très utile pour préparer des ensembles de correctifs et corriger vos erreurs ( avant de publier les commits).
  • … Et beaucoup plus.

Il y a quelques inconvénients:

  • Il n'y a pas encore beaucoup de bonnes interfaces graphiques. C'est nouveau et Subversion existe depuis bien plus longtemps, c'est donc naturel car il y a quelques interfaces en développement. code.google.com/p/tortoisegit et GitHub pour Mac sont quelques-uns des meilleurs.
  • Les extractions partielles / clones de référentiels ne sont pas possibles pour le moment (j'ai lu que c'est en développement). Cependant, il existe un support de sous-module. Git 1.7+ prend en charge les paiements clairsemés .
  • Cela pourrait être plus difficile à apprendre, même si je n'ai pas trouvé que c'était le cas (il y a environ un an). Git a récemment amélioré son interface et est assez convivial.

Dans l’utilisation la plus simpliste, Subversion et Git sont à peu près les mêmes. Il n'y a pas beaucoup de différence entre:

svn checkout svn://foo.com/bar bar
cd bar
# edit
svn commit -m "foo"

et

git clone [email protected]:foo/bar.git
cd bar
# edit
git commit -a -m "foo"
git push

Là où Git brille vraiment, c'est la ramification et le travail avec d'autres personnes.

J'utilise Subversion depuis quelques années et après avoir utilisé SourceSafe , j'adore Subversion. Combiné avec TortoiseSVN , je ne peux vraiment pas imaginer comment cela pourrait être mieux.

Pourtant, de plus en plus de développeurs prétendent que Subversion pose des problèmes et que nous devrions passer à la nouvelle génération de systèmes de contrôle de version distribués, tels que Git .

Comment Git améliore-t-il Subversion?


Avec Git, vous pouvez pratiquement tout faire hors ligne, car tout le monde a son propre référentiel.

Faire des branches et fusionner entre les branches est vraiment facile.

Même si vous ne possédez pas les droits de validation pour un projet, vous pouvez toujours avoir votre propre référentiel en ligne et publier des "requêtes push" pour vos correctifs. Tous ceux qui aiment vos correctifs peuvent les intégrer à leur projet, y compris les mainteneurs officiels.

Il est facile de créer un projet, de le modifier et de continuer à fusionner les corrections de bogues de la branche HEAD.

Git fonctionne pour les développeurs du noyau Linux. Cela signifie qu’il est très rapide (ce doit être) et s’adapte à des milliers de contributeurs. Git utilise également moins d'espace (jusqu'à 30 fois moins d'espace pour le référentiel Mozilla).

Git est très flexible, très TIMTOWTDI (il y a plus d'une façon de le faire). Vous pouvez utiliser le flux de travail de votre choix et Git le prendra en charge.

Enfin, GitHub un excellent site pour héberger vos référentiels Git.

Inconvénients de Git:

  • c'est beaucoup plus difficile à apprendre, car Git a plus de concepts et plus de commandes.
  • les révisions n'ont pas de numéro de version comme dans Subversion
  • de nombreuses commandes Git sont cryptiques et les messages d'erreur très hostiles à l'utilisateur
  • il manque une bonne interface graphique (comme le grand TortoiseSVN )

Ce qui est amusant, c’est que j’héberge des projets dans Subversion Repos, mais que je les y accède via la commande Git Clone.

Veuillez lire Développer avec Git sur un projet de code Google.

Bien que Google Code parle nativement Subversion, vous pouvez facilement utiliser Git pendant le développement. La recherche de "git svn" suggère que cette pratique est répandue et nous vous encourageons également à l'expérimenter.

Utiliser Git sur un référentiel Svn me procure des avantages:

  1. Je peux travailler réparti sur plusieurs machines, les engager et les extraire
  2. J'ai un référentiel central de backup/public svn que les autres utilisateurs peuvent consulter
  3. Et ils sont libres d'utiliser Git pour leur propre compte.

D'autres réponses ont bien expliqué les principales fonctionnalités de Git (qui sont excellentes). Mais il y a aussi tellement de petites manières que Git se comporte mieux et aide à garder ma vie plus saine d'esprit. Voici quelques petites choses:

  1. Git a une commande 'clean'. SVN a désespérément besoin de cette commande, compte tenu de la fréquence à laquelle il exportera des fichiers supplémentaires sur votre disque.
  2. Git a la commande 'bisect'. C'est bien.
  3. SVN crée des répertoires .svn dans chaque dossier (Git crée un seul répertoire .git). Chaque script que vous écrivez et chaque grep que vous faites devront être écrits pour ignorer ces répertoires .svn. Vous avez également besoin d’une commande complète ("svn export") pour obtenir une copie saine de vos fichiers.
  4. Dans SVN, chaque fichier et dossier peut provenir d’une révision ou d’une branche différente. Au début, ça a l'air bien d'avoir cette liberté. Mais ce que cela signifie en réalité, c’est qu’il ya un million de façons différentes pour que votre caisse locale soit complètement foutue. (par exemple, si "svn switch" échoue à mi-chemin ou si vous entrez une commande incorrecte). Et le pire, c’est: si vous vous retrouvez dans une situation où certains de vos fichiers proviennent d’un endroit et d’autres, le "statut svn" vous dira que tout est normal. Vous devrez faire "svn info" sur chaque fichier / répertoire pour découvrir à quel point les choses sont bizarres. Si "statut git" vous dit que les choses sont normales, alors vous pouvez avoir confiance que les choses sont vraiment normales.
  5. Vous devez dire à SVN chaque fois que vous déplacez ou supprimez quelque chose. Git va juste comprendre.
  6. Ignorer la sémantique est plus facile dans Git. Si vous ignorez un modèle (tel que * .pyc), il sera ignoré pour tous les sous-répertoires. (Mais si vous voulez vraiment ignorer quelque chose pour un seul répertoire, vous pouvez). Avec SVN, il semble qu’il n’existe aucun moyen simple d’ignorer un modèle dans tous les sous-répertoires.
  7. Un autre élément impliquant ignorer des fichiers. Git permet d'avoir des paramètres "privés" d'ignorance (en utilisant le fichier .git / info / exclude), ce qui n'affectera personne d'autre.

Git et DVCS en général sont parfaits pour les développeurs qui codent beaucoup indépendamment les uns des autres, car chacun a sa propre branche. Si vous avez besoin d'un changement de quelqu'un d'autre, cependant, elle doit s'engager dans son dépôt local et ensuite, elle doit vous transmettre ce changement ou vous devez le lui retirer.

Mon propre raisonnement me fait également penser que DVCS rend les choses plus difficiles pour l’assurance qualité et la gestion des versions si vous effectuez des tâches telles que des versions centralisées. Quelqu'un doit être responsable de ce transfert / extraction à partir du référentiel de tous les autres, en résolvant tous les conflits qui auraient été résolus au moment de la validation initiale avant, puis en effectuant la construction, puis en demandant à tous les autres développeurs de resynchroniser leurs dépôts.

Tout cela peut être traité avec des processus humains, bien sûr; DVCS vient de casser quelque chose qui a été corrigé par le contrôle de version centralisé afin de fournir de nouvelles commodités.


Git facilite également la création de branches et la fusion. Subversion 1.5 vient d’ajouter le suivi de la fusion, mais Git est toujours meilleur. Avec Git, brancher est très rapide et bon marché. Cela facilite la création d'une branche pour chaque nouvelle fonctionnalité. Les dépôts Oh et Git sont très efficaces en termes d'espace de stockage par rapport à Subversion.



Grâce au fait qu'il n'est pas nécessaire de communiquer constamment avec un serveur central, chaque commande s'exécute en moins d'une seconde (évidemment, les opérations git push / pull / fetch sont plus lentes simplement parce qu'elles doivent initialiser les connexions SSH). La création de branche est beaucoup plus facile (une commande simple à créer, une commande simple à fusionner)


J'aime absolument pouvoir gérer les branches locales de mon code source dans Git sans perturber l'eau du référentiel central. Dans de nombreux cas, je vais extraire le code du serveur Subversion et exécuter un référentiel Git local uniquement pour pouvoir le faire. Il est également intéressant de noter que l’initialisation d’un référentiel Git ne pollue pas le système de fichiers avec une multitude de dossiers .svn agaçants partout.

Et dans la mesure où Windows prend en charge les outils, TortoiseGit gère très bien les bases, mais je préfère tout de même la ligne de commande, sauf si je souhaite afficher le journal. J'aime beaucoup la manière dont Tortoise {Git | SVN} aide à la lecture des journaux de validation.


Je pense que Subversion va bien .. jusqu'à ce que vous commenciez à fusionner ... ou à faire quelque chose de compliqué ... ou à faire quelque chose que Subversion trouve compliqué (par exemple, faire des requêtes pour savoir quelles branches ont été gâchées par un fichier particulier, d'où provient un changement, détecter les copies et les pâtes , etc)...

Je ne suis pas d’accord avec la réponse gagnante, affirmant que le principal avantage de GIT est le travail hors ligne. C’est certes utile, mais c’est plutôt un extra pour mon cas d’utilisation. SVK peut aussi travailler hors ligne, mais il n’est pas question pour moi d’investir mon temps d’apprentissage).

C'est juste qu'il est incroyablement puissant et rapide et, après s'être habitué aux concepts, très utile (oui, en ce sens: convivial).

Pour plus de détails sur une histoire en fusion, voir ceci: Utilisation de git-svn (ou similaire) * juste * pour vous aider avec une fusion svn?


Quelques réponses y ont fait allusion, mais je tiens à préciser deux points:

1) La possibilité de faire des commits sélectifs (par exemple, git add --patch ). Si votre répertoire de travail contient plusieurs modifications qui ne font pas partie de la même modification logique, Git simplifie grandement la réalisation d'une validation qui n'inclut qu'une partie des modifications. Avec Subversion, c'est difficile.

2) La capacité de s’engager sans rendre le changement public. Dans Subversion, tout commit est immédiatement public et donc irrévocable. Cela limite considérablement la capacité du développeur à "commettre tôt, commettez souvent".

Git est plus qu'un simple VCS; c'est aussi un outil pour développer des correctifs. Subversion est simplement un VCS.


Subversion est toujours un système de contrôle de version beaucoup plus utilisé, ce qui signifie qu'il prend mieux en charge les outils. Vous trouverez des plugins SVN matures pour presque tous les IDE , et de bonnes extensions d’explorateur sont disponibles (comme TurtoiseSVN). Sinon, je suis d'accord avec Michael : Git n'est ni meilleur ni pire que Subversion, c'est différent.


Tout repose sur la facilité d'utilisation / les étapes nécessaires pour faire quelque chose.

Si je développe un seul projet sur mon PC / ordinateur portable, git est préférable, car il est beaucoup plus facile à configurer et à utiliser. Vous n'avez pas besoin d'un serveur et vous n'avez pas besoin de continuer à taper les URL du référentiel lorsque vous effectuez des fusions.

S'il n'y avait que 2 personnes, je dirais que git est aussi plus facile, parce que vous pouvez simplement pousser et tirer les uns des autres.

Une fois que vous aurez dépassé ce seuil, vous opterez pour la subversion, car vous devez alors configurer un serveur ou un emplacement «dédié».

Vous pouvez le faire aussi bien avec git que avec SVN, mais les avantages de git sont compensés par la nécessité de procéder à des étapes supplémentaires pour la synchronisation avec un serveur central. En SVN, vous venez de commettre. Dans git vous devez git commit, puis git push. L'étape supplémentaire devient agaçante simplement parce que vous finissez par le faire tellement.

SVN bénéficie également de meilleurs outils graphiques, mais l'écosystème git semble rapidement rattraper son retard. Je ne m'inquiéterais donc pas à long terme.


Toutes les réponses ici sont comme prévu, centrées sur le programmeur, mais que se passe-t-il si votre entreprise utilise le contrôle de révision en dehors du code source? Il existe de nombreux documents autres que le code source, bénéficiant du contrôle de version et devant vivre à proximité du code et non dans un autre CMS. La plupart des programmeurs ne travaillent pas en vase clos - nous travaillons pour des entreprises en équipe.

Dans cet esprit, comparez la facilité d'utilisation, tant dans l'outillage client que dans la formation, entre Subversion et git. Je ne vois pas de scénario où un système de contrôle de révision distribué sera plus facile à utiliser ou à expliquer à un non-programmeur. J'aimerais beaucoup me tromper, car je pourrais alors évaluer git et espérer qu'il sera accepté par des personnes qui ont besoin du contrôle de version mais qui ne sont pas des programmeurs.

Même dans ce cas, si la direction nous demandait pourquoi nous devrions passer d’un système de contrôle de révision centralisé à un système de contrôle de révision distribué, j’aurais du mal à donner une réponse honnête, car nous n’en avons pas besoin.

Disclaimer: Je me suis intéressé très tôt à Subversion (autour de la v0.29), ce qui est évidemment un parti pris, mais les entreprises pour lesquelles je travaille depuis bénéficient de mon enthousiasme car j'ai encouragé et soutenu son utilisation. Je soupçonne que c'est comme ça que ça se passe avec la plupart des éditeurs de logiciels. Avec autant de programmeurs qui se lancent dans l'aventure git, je me demande combien d'entreprises vont manquer aux avantages d'utiliser le contrôle de version en dehors du code source? Même si vous avez des systèmes distincts pour différentes équipes, vous ne bénéficiez pas de certains avantages, tels que l'intégration du suivi des problèmes (unifié), tout en augmentant les exigences en matière de maintenance, de matériel et de formation.


David Richards Blog WANdisco sur Subversion / GIT

L'émergence de GIT a amené une série de fondamentalistes du DVCS - les "Gitterons" - qui pensent que rien d'autre que GIT n'est de la merde. Les Gitteron semblent penser que l’ingénierie logicielle se produit sur leur propre île et oublient souvent que la plupart des entreprises n’emploient pas exclusivement d’ingénieurs logiciels expérimentés. Ce n'est pas grave, mais ce n'est pas ce que pense le reste du marché, et je suis heureux de le prouver: GIT, au dernier coup d'œil, détenait moins de trois pour cent du marché, tandis que Subversion comptait environ cinq millions d'utilisateurs et environ la moitié des utilisateurs. l'ensemble du marché.

Le problème que nous avons vu était que les Gitterons tiraient (à bon compte) sur Subversion. Des tweets comme «Subversion est tellement [lent / merdeux / restrictif / ne sent pas bon / me regarde de façon amusante] et maintenant j'ai GIT et [tout fonctionne dans ma vie / ma femme est tombée enceinte / j'ai eu une petite amie après 30 ans d’essai / j’ai gagné six fois sur la table de blackjack]. Vous obtenez la photo.


http://subversion.wandisco.com/component/content/article/1/40.html

Je pense qu'il est assez prudent de dire que parmi les développeurs, les vs SVN. L'argument Git fait rage depuis un certain temps maintenant, chacun ayant son propre point de vue sur ce qui est meilleur. Cela a même été abordé dans les questions lors de notre webinaire sur Subversion en 2010 et au-delà.

Hyrum Wright, notre directeur de l'open source et président de Subversion Corporation, décrit les différences entre Subversion et Git, ainsi que d'autres systèmes de contrôle de version distribuée (DVCS).

Il évoque également les changements à venir dans Subversion, tels que la copie de travail de prochaine génération (WC-NG), qui, selon lui, entraînera la reconversion de plusieurs utilisateurs de Git vers Subversion.

Regardez sa vidéo et dites-nous ce que vous en pensez, soit en commentant ce blog, soit en postant sur nos forums. L'inscription est simple et ne prend qu'un instant!


Easy Git a une belle page qui compare l'utilisation réelle de Git et de SVN, ce qui vous donnera une idée de ce que Git peut faire (ou faire plus facilement) par rapport à SVN. (Techniquement, cela est basé sur Easy Git, qui est un wrapper léger sur Git.)



Syntevo SmartGit pourrait être une bonne solution pour ceux qui recherchent une bonne interface graphique Git . Son logiciel propriétaire, mais gratuit pour une utilisation non commerciale, fonctionne sous Windows / Mac / Linux et prend même en charge SVN en utilisant une sorte de pont git-svn, je pense.


Je vis depuis peu dans Git Land, et j'aime bien mes projets personnels, mais je ne serais pas en mesure de passer de projets Subversion à celui-ci, vu le changement de mentalité requis de la part du personnel, sans avantages urgents. De plus, le plus gros projet que nous menons en interne dépend extrêmement de svn:externals qui, d'après ce que j'ai vu jusqu'à présent, ne fonctionne pas aussi bien et de manière transparente dans Git.







git