Pourquoi Git est meilleur que Subversion?

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

Pourtant, il y a un nombre croissant de développeurs qui prétendent que Subversion a 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?

0
Intéressant, le message plus détaillé que vous avez posté dans le cadre de votre dernière édition est le même que dans sharepointoverflow.com/questions/966/…
ajouté l'auteur Darren Kopp, source
C'est quelque chose qui vient avec VseWss 1.3 n'est-ce pas?
ajouté l'auteur Darren Kopp, source
Peut-être que vous devriez publier un lien vers une référence où il est dit que la commande que vous essayez d'exécuter est supposée fonctionner.
ajouté l'auteur Darren Kopp, source
Peux-tu être plus précis? Est-ce la question de savoir quelle relation Bousfield localisation a des cycles de disparition?
ajouté l'auteur Stephen Pellicer, source
Est-ce que l'un des jetons mentionnés dans electronics.stackexchange.com/questions/6676/… travaille pour vous?
ajouté l'auteur Jeremy Ruten, source
Essayez de poser une question dans le titre. De plus, les vrais noms sont géniaux.
ajouté l'auteur Jarrod Dixon, source
"Exist analoga ..." n'est pas seulement pas anglais, mais boiteux. :-)
ajouté l'auteur Jarrod Dixon, source
Cela me fait penser aux pluriels latins, analogique -> analogi ?
ajouté l'auteur Ilya Nikokoshev, source
"Peux-tu être plus précis?" C'est simplement que parmi les nombreuses questions que Morava mentionne dans son article, le dernier commentaire sur les cycles de disparition me semblait presque compréhensible, mais les experts que j'ai interrogés à ce sujet ont donné des réponses contradictoires déroutantes. Donc, je conclus avoir manqué de compréhension et demander plus. Conc. "vrais noms": L'anonymat rend la pose de questions éventuellement stupides plus facile.
ajouté l'auteur Thomas Riepe, source
@Japp, vous avez raison, nous utilisons VseWss 1.3, j'ai mis à jour la question
ajouté l'auteur Shiraz Bhaiji, source

31 Réponses

avez-vous essayé de regarder dans la série 74xx de la logique? Choisissez votre saveur préférée. 74HC194 et 74HC195 sont des registres à décalage à 4 bits; 74HC174 (quadruple flip-flop) et 74HC175 (flip-flop hexagonal) peuvent être transformés en registres à décalage.

edit: en fonction de vos commentaires, pourquoi n'utilisez-vous pas un HC594 (sortie) ou HC597 (entrée)? Ce sont des registres de 8 bits, facilement cascadables à des longueurs arbitraires, compatibles avec une interface SPI ainsi que de simples claviers.

8
ajouté
Je cherche quelque chose qui me permet d'en mettre plusieurs ensemble dans une chaîne, comme le MAX6969 de Maxim où, lorsque je clique sur Cin, 16 cycles d'horloge plus tard, il apparaît à Dout. Donc, pour avoir deux des mêmes puces l'une à côté de l'autre, je peux envoyer 32 bits de données, et les deux puces vont maintenant contenir des données.
ajouté l'auteur urini, source

Mes excuses si c'est trop ou trop peu; laisse un commentaire et je peux essayer de le corriger. Il parle d'un problème spécifique dans la théorie de l'homotopie que nous aimerions mieux comprendre.

La catégorie d'homotopie stable (implicitement localisée à un p premier) a une stratification en couches «chromatiques», qui correspondent à une connexion à des lois de groupe formelles. Nous considérons géométriquement la catégorie d'homotopie stable comme une sorte de catégorie de faisceaux sur une pile de modules X qui a une suite de sous-espaces ouverts X (n) - ce sont les catégories "E (n) -local", et il y a la localisation de Bousfield des foncteurs prenant un élément général M à sa localisation E (n) L E (n) M, que vous pouvez considérer comme limitant au sous-champ ouvert. (Une localisation générale de Bousfield prendra une certaine notion d '«équivalence» et construira une nouvelle catégorie universelle où ces équivalences deviendront des isomorphismes, mais de manière appropriée.)

La différence X (n) \ X (n-1) entre deux couches adjacentes est un sous-paquet fermé de X (n), qui dans notre langage est la catégorie "K (n) -local". Il y a aussi un foncteur de localisation Bousfield qui prend un élément M à sa localisation K (n) L K (n) M. La localisation de Bousfield est une machinerie assez générale et dans la situation «ouverte» précédente elle agissait comme restriction; dans cette situation "fermée", elle agit comme une complétion le long du sous-champ fermé.

Nous avons une compréhension générale des catégories locales K (n). Ils agissent beaucoup comme une sorte de pile de quotient d'un espace de Lubin-Tate classant des déformations d'une loi de groupe de hauteur n par le schéma de groupe d'automorphismes de ladite loi de groupe formel, qui est le nième groupe de stabilisateurs Morava S n . Géométriquement on y pense comme un point avec un assez grand groupe d'automorphismes (bien que ce soit, bien sûr, la mauvaise façon de penser à des choses ). Ce sont des endroits où vous pouvez vous salir et faire des calculs spécifiques et examiner une couche chromatique à la fois.

Nous avons besoin de deux autres données pour comprendre M lui-même à partir de ses localisations L K (n) M: nous devons comprendre comment elles sont réparties dans les localisations E (n) , et nous devons comprendre la limite de L E (n) M. Ce dernier est une question de "convergence chromatique" et n'est pas immédiatement pertinent pour le point en discussion.

En général, il existe un diagramme de «patching», qui est à peu près quelque chose comme les données que vous associeriez habituellement à un recollement. (Ma référence préférée pour les données dans ce genre de situation est "Notes sur la cohomologie des champs numériques" de Mazur.) Nous avons un diagramme de retrait (homotopie)

LE(n) M  ->  LE(n-1) M
     |             |
     V             V
LK(n) M  ->  LE(n-1) LK(n) M

cela nous indique qu'un objet général E (n) -local est reconstruit à partir d'un objet local K (n) (quelque chose de concentré sur la pile fermée), un objet local E (n-1) (concentré sur la pile ouverte) et patcher des données (une carte de l'objet sur la pile ouverte à la restriction de l'objet complet à la pile ouverte). Ceci suit grossièrement parce que la localisation K (n) de n'importe quel objet local E (n-1) est triviale.

Le foncteur qui prend un objet concentré près du sous-champ fermé et le restreint (de manière dérivée) au sous-champ ouvert est ce que Morava considère. Ici, dans le langage de la localisation de Bousfield, c'est la localisation de E (n-1) appliquée aux objets locaux K (n). Ce qu'il semble proposer, c'est que cette configuration générale de localisation de Bousfield devrait être une façon de penser aux foncteurs de cycles de fuite (et je suis d'accord avec son antipathie pour la terminologie de «disparition») dans laquelle nous pouvons, de manière entièrement dérivée, voir réaies sur une grande pile comme provenant de données de patch sur une paire ouverte-fermée.

Juste pour boucler la boucle, ce que nous ne comprenons pas du tout dans cette image, c'est ce que fait vraiment ce truc de "couche trans-chromatique". Nous avons, par exemple, deux groupes de stabilisateurs reliés à des lois de groupe formelles de hauteurs adjacentes, et nous ne comprenons pas vraiment ce que le foncteur de spécialisation fait vraiment dans ce cas.

7
ajouté
@SGP: Les théories de la cohomologie sont censées ressembler à des gerbes quasi-homo, oui. Je suppose que je dirais que le type de foncteur "cycles de fuite" ne serait pas obtenu en se décomposant en gerbes sur un sous-ensemble ouvert et en gerbes sur le sous-ensemble fermé, mais plutôt sur un sous-ensemble ouvert et des gerbes sur le schéma formel qui est l'achèvement de son complément. Je suis d'accord que cela a probablement plus en commun avec les carrés de retrait arithmétiques qu'avec les cycles de disparition "habituels".
ajouté l'auteur Stephen Pellicer, source
Réponse géniale! petite confusion: les théories de cohomologie sont-elles censées être des gerbes quasi-héroïques? Je demande, parce que les cycles de disparition sont habituellement pour les coefficients $ \ ell $ -adiques et je ne sais pas s'il y a une théorie (significative) des cycles de disparition des faisceaux quasi-homocinétiques.
ajouté l'auteur SGP, source

Je n'irais pas jusqu'à dire que je comprends, mais ce que j'en tire est la suivante:
On peut considérer grossièrement que le foncteur de cycles de fuite provient de données de collage pour le recollement associé à la fibre singulière. C'est un morceau de gadgetry très général (comme c'est la localisation de Bousfield) et on pourrait le voir comme une version générale du foncteur de cycles de fuite. En outre, on pourrait non seulement construire une version du groupoïde fondamental correspondant aux foncteurs de fibres homologiques et à leurs automorphismes, mais aussi associer des informations aux pièces ouvertes et aux inclusions, ce que l'on pourrait espérer voir de façon raisonnable. monter au foncteur des cycles de fuite. Cela permettrait de définir les isomorphismes de la monodromie et les autres morceaux que l'on voudrait avoir dans le cadre du formalisme (et pourrait aussi être nécessaire pour donner la bonne définition du foncteur des cycles de fuite).

Peut-être que c'est horriblement faux, mais si tout se passe bien j'espère que ça va motiver quelqu'un à me corriger et je peux enlever ça!

2
ajouté

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'elle est décentralisée. Imaginez que vous êtes un développeur sur la route, vous développez sur votre ordinateur portable et vous voulez avoir le contrôle de la source pour que vous puissiez revenir en arrière 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 valider. Si vous voulez faire une copie de votre code, vous devez le copier / coller littéralement.

Avec Git, vous n'avez pas ce problème. Votre copie locale est un référentiel, et vous pouvez y adhérer et bénéficier de tous les avantages du contrôle de la source. Lorsque vous récupérez la connectivité au référentiel principal, vous pouvez vous y opposer.

Cela semble bon au début, mais gardez à l'esprit la complexité ajoutée à cette approche.

Git semble être la chose «nouvelle, brillante, cool». Ce n'est pas une mauvaise chose (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 sur le train "Distributed Source Control" parce qu'il est nouveau et écrit par Linus Torvalds. savoir pourquoi / si c'est mieux.

Subversion a des problèmes, mais Git, Mercurial, CVS, TFS ou autre.

Edit: So this answer is now a year old and still generates many upvotes, so I thought I'll add some more explanations. In the last year since writing this, Git has gained a lot of momentum and support, particularly since sites like GitHub really took off. I'm using both Git and Subversion nowadays and I'd like to share some personal insight.

Tout d'abord, Git peut être très déroutant au début quand on travaille décentralisé. Qu'est-ce qu'une télécommande? et Comment configurer correctement le référentiel initial? sont deux questions qui apparaissent 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 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 gens qui changent - la "bonne" manière semble être "git clone", alors que "git checkout" semble changer de branche.

Git brille vraiment quand 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 sur les façons de copier le repo). Avec Git, c'est le mode par défaut de toute façon. C'est une commande supplémentaire cependant (git commit commet localement, alors que git push origin master pousse la branche master vers la distante nommée "origin").

Comme dit ci-dessus: Git ajoute de la complexité. Deux modes de création de référentiels, checkout et clone, commit et push ... Vous devez savoir quelles commandes fonctionnent localement et lesquelles fonctionnent avec "le serveur" (je suppose que la plupart des gens aiment encore un "référentiel maître" central) ).

De plus, l'outillage est encore insuffisant, au moins sur Windows. Oui, il existe un AddIn 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 dépôt, tous les changements vers lui, si vous savez créer, valider et vérifier et vous êtes prêt à partir et ramasser des choses comme ramifier, mettre à jour etc. sur.

Git a l'avantage que c'est BEAUCOUP mieux adapté si certains développeurs ne sont pas toujours connectés au référentiel maître. En outre, 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 à prévoir, car ce sont les principales raisons pour lesquelles il a été écrit).

Cela explique aussi pourquoi il gagne autant de buzz sur Internet, car Git est parfaitement adapté aux projets Open Source: Just Fork it, validez vos modifications sur votre propre Fork, puis demandez au responsable de projet d'origine de récupérer vos modifications. Avec Git, cela fonctionne. Vraiment, essayez-le sur Github, c'est magique.

Ce que je vois également 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 changements vers SVN.

Mais même avec ce long ajout, je reste toujours fidèle à mon message: Git n'est pas meilleur ou pire, c'est juste différent. Si vous avez besoin de «contrôle de source hors ligne» et de la volonté de consacrer du temps supplémentaire à l'apprendre, c'est fantastique. Mais si vous avez un Contrôle de Source strictement centralisé et / ou 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.

0
ajouté
Non, tu ne l'as pas fait. Une Ferrari est impraticable, chère, soif, et ne vous améliorera pas de A à B si vous vivez dans une ville comme New York ou Paris - je préférerais une Hyundai pour beaucoup d'endroits, aussi parce qu'une égratignure est beaucoup moins sévère. Mais à chacun son sien - une Ferrari a aussi (très peu) d'avantages ...
ajouté l'auteur Michael Stum, source
C'est la conclusion si vous avez vraiment passé du temps à l'étudier ET si vous avez les outils pour cela (Bien sûr, vous devez connaître tous les outils en ligne de commande de votre CVS, mais cela ne veut pas dire que les gens aiment les utiliser tout le temps ). Comme dit, beaucoup de gens (je sais) ont dit Git = Bon parce que Linus
ajouté l'auteur Michael Stum, source
@sebnow je faisais référence à init git vs git init --bare
ajouté l'auteur Michael Stum, source
@hasen Seulement si vous surmontez la courbe d'apprentissage beaucoup plus raide. Je l'aime absolument, mais dans les environnements où vous devez encore vendre le concept de contrôle de la source à vos développeurs (ce qui signifie la plupart du temps un Windows en utilisant un magasin de développement), SVNs outils supérieurs et la simplicité bat simplement git par miles. Si (et c'est un "si", pas un "quand") vos devs utilisent vraiment le contrôle de source, alors git peut commencer à briller. Je n'utiliserais plus jamais SVN, mais une tonne de gens n'utiliseraient jamais Git si elle ne s'i
ajouté l'auteur Michael Stum, source
J'ai fait quelques ajouts, car les 12 derniers mois m'ont vraiment vendu sur Git. C'est toujours une courbe d'apprentissage très raide et l'outillage n'est pas vraiment génial sur Windows, mais une fois appris, c'est excellent. Je ne veux pas avoir l'air d'un annonceur, mais la série Mastering Git de TekPub m'a aidé à le comprendre, en particulier le (pour moi) chose dure et critique sur "Comment fonctionne Remotes".
ajouté l'auteur Michael Stum, source
Mes expériences avec git ne sont pas exactement une "révélation qui change la vie". Je considère que c'est un bon outil quand ça marche, quand ça ne marche pas, ça me semble plutôt dépourvu de poli. Je n'ai pas été trop impressionné en déboguant des choses comme la Question 1052882, et même si c'est clairement un problème RTFM: je considère git (et tout autre vcs distribué) comme plus compliqué que centralisé, et je considérerais l'utiliser dans des environnements centralisés . Mais là encore, je suis principalement un développeur Windows, et les outils sont encore immatures sur Windows par ra
ajouté l'auteur Michael Stum, source
@dana je préfère aussi un Hayabusa = x
ajouté l'auteur Pavel Radzivilovsky, source
@ Michael: ce qui est différent à propos du logiciel, c'est que le clonage ne coûte rien (presque). Par conséquent, une seule conception a le droit de vivre. Il n'y a pratiquement pas de marché à partager, ce qui explique pourquoi ce n'est pas comme les voitures.
ajouté l'auteur Pavel Radzivilovsky, source
Git ne semble pas si compliqué. Cela ne prend que quelques minutes pour apprendre à l'utiliser, si vous avez une bonne instruction étape par étape. Et il a un grand soutien sur des sites comme GitHub et Stack Overflow.
ajouté l'auteur B Seven, source
Euh, vous pouvez simplement héberger un serveur svn sur votre ordinateur local?
ajouté l'auteur bevacqua, source
@ Michael Stum: le "git est dur" meme est totalement un mythe. Je trouve que git est beaucoup plus facile que svn. Je n'ai jamais vraiment compris la subversion; git a juste du sens. Bien que je sois d'accord avec vous, il peut être un peu plus difficile à vendre aux gars Windows.
ajouté l'auteur hasen, source
Je suis étonné que ce soit la meilleure réponse! (AFAICT de git affectionados) git n'est pas seulement svn avec offline - c'est une toute nouvelle révélation qui change la vie. Je pense que cela a été rejeté par les fans de svn qui en ont marre d'entendre à quel point git est génial.
ajouté l'auteur Paul Biggar, source
Vous analysez seulement l'aspect distribution dans la comparaison. Je vais te dire pourquoi. Parce que vous ne voulez que partager du code. Git et SVN sont plus que cela, avez-vous déjà étiqueté, ramifié, fusionné, résolu des conflits, copier des correctifs entre les branches? Je pense que votre analyse est juste imparfaite. Dans ces aspects, git est un outil puissant. Sans parler des choses que Git peut, et SVN ne peut pas, comme écraser, désencombrer, ammending, rebasing, cerise-picking, et beaucoup plus de choses.
ajouté l'auteur mschonaker, source
Newflash: Les personnes autres que les développeurs utilisent des systèmes de contrôle de révision. Je suis sûr que git est la seconde venue, mais en tant qu'administrateur svn, nous avons des non-développeurs qui l'utilisent (principalement via TortoiseSVN), et je suis sûr à 99% que si nos développeurs exigeaient git, je maintiendrais 2 systèmes de contrôle de révision au lieu d'un. En aparté: combien de systèmes de suivi de bogues et de problèmes permettent de configurer plusieurs RCS?
ajouté l'auteur si618, source
Je pense aussi que le plaidoyer du GIT pourrait prendre cela à cœur. Vous pouvez marteler les principes et qui l'utilise depuis des années, mais après la première fois qui est filtrée. Il pourrait utiliser une explication plus pratique (comme la façon dont le flux de travail ressemble généralement) au lieu des discussions abstraites.
ajouté l'auteur Marco van de Voort, source
désolé mais j'ai dû donner à celui-ci un vote négatif. Pas vraiment du tout et pas de bons arguments plus mashup confus de clone et checkout qui sont deux opérations entièrement différentes!
ajouté l'auteur gilligan, source
Quand les gens disent que Git est plus rapide que Subversion, sont-ils en train de comparer les check-ins locaux de Git aux check-ins à distance de Subversion? Cela ne semble pas être une comparaison équitable, puisque les enregistrements locaux ne sont pas dans le référentiel central pour que les autres puissent les voir, et ne seront pas sauvegardés si votre copie locale est corrompue ou perdue d'une manière ou d'une autre ...
ajouté l'auteur Chris Jaynes, source
Git est meilleur que svn. Objectivement. Factuellement. Quiconque prétend le contraire ne connaît pas non plus Git et essaie de rationaliser en évitant l'investissement pour l'apprendre, ou est simplement irrationnel à propos de l'évaluation parce qu'ils ont des liens émotionnels avec SVN.
ajouté l'auteur Charlie Flowers, source
Il est à noter que Jira autorise la configuration de plusieurs référentiels et de plusieurs types de repo à la fois pour ceux qui sont intéressés ou qui ont des besoins différents en matière de contrôle des révisions.
ajouté l'auteur krystan honour, source
La distribution n'est pas la seule différence entre Subversion et Git. Il n'ajoute aucune complexité à moins que vous n'utilisiez plusieurs référentiels. Il y a beaucoup d'avantages à utiliser Git au lieu de Subversion, mais seulement quelques inconvénients (pour la plupart insignifiants). Git est utilisé parce que c'est bon, pas brillant.
ajouté l'auteur sebnow, source
OP semble être confus au sujet de Git, ou je suis un malentendu. Il n'y a pas "deux modes de création de repos," git clone ~~ svn co , git push ~~ svn ci < / code>, validation git ~~ svn add / rm / etc . Git est seulement difficile à apprendre si vous avez des idées préconçues sur le fonctionnement de VCS. J'ai commencé avec mercurial, est allé à git, et a ensuite dû apprendre SVN. Devinez qui était le plus difficile à utiliser? SVN! J'ai commencé à utiliser git-svn parce que SVN est si horrible. Il n'y a rien
ajouté l'auteur sebnow, source
Ah, dans ce cas, je suppose que svnadmin créer ~~ git init --bare . La seule différence entre - bare et normal est qu'un repo normal a un répertoire de travail (les fichiers sont extraits). Ceci est généralement utilisé uniquement comme serveur / référentiel central et peut être ignoré par l'utilisateur type. En ce sens, SVN a "deux" façons de créer des repos aussi bien; svnadmin create et svn co .
ajouté l'auteur sebnow, source
Je vais devoir jouer avec la foule "Git et / ou Hg est une révélation qui change la vie". IMO, git> svn, hg> svn, git == hg. Subversion utilise un modèle interne intrinsèquement cassé pour son référentiel.
ajouté l'auteur haydenmuhl, source
@gilligan, je suis d'accord. La seule chose positive dans cette réponse, c'est que je l'ai trouvé: c'est poliquement correct ("pas mieux / pas pire, juste différent").
ajouté l'auteur inger, source
La question était "Pourquoi git est-il meilleur?", Et la réponse la plus mise à jour (et sélectionnée) commence par "Git n'est pas mieux". Hilarant.
ajouté l'auteur Mark Beckwith, source
Une Ferrari n'est pas meilleure qu'une Hyundai. Mais ce n'est pas pire non plus. C'est différent. (Quoi? Ne me regardez pas de cette façon ... Ai-je dit quelque chose de mal?)
ajouté l'auteur F.D.Castel, source
@ steve314: Désolé pour la réponse tardive. Le type de femme qui est impressionné par votre voiture ou le choix de VCS est peu profond et susceptible d'être très exigeant. Elle vous laissera tomber un battement de cœur pour un gars avec de nouveaux VCS intriqués quantique qui rend vos commits instantanément disponibles dans toutes les copies.
ajouté l'auteur Hugh Brackett, source

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

Faire des branches et fusionner entre branches est vraiment facile.

Même si vous ne disposez pas de droits de validation pour un projet, vous pouvez toujours disposer de votre propre référentiel en ligne et publier des «demandes push» pour vos correctifs. Tous ceux qui aiment vos patchs peuvent les intégrer dans leur projet, y compris les mainteneurs officiels.

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

Git fonctionne pour les développeurs du noyau Linux. Cela signifie qu'il est vraiment rapide (il doit être), et échelles à 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 n'importe quel flux de travail que vous voulez, et Git le supportera.

Enfin, GitHub , un excellent site pour héberger vos dépôts Git.

Inconvénients de Git:

  • c'est beaucoup plus difficile à apprendre, parce que 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 sont très peu conviviaux
  • il manque une bonne interface graphique (comme le grand TortoiseSVN )
0
ajouté
Deux bons gui je sais sont gitx (Mac) et gitg - vraiment gentil.
ajouté l'auteur Michael Durrant, source
+1 pour moi Je pense que beaucoup de développeurs oublient que git manque quelque chose comme TortoiseSVN, et que non seulement les développeurs utilisent le contrôle de version. Je frémis à l'idée d'avoir à expliquer (et supporter) le contrôle de version distribué à nos non-développeurs en utilisant SVN | TortoiseSVN!
ajouté l'auteur si618, source
un autre inconvénient - vous devez avoir une copie complète du référentiel, vous ne pouvez pas travailler sur les partiels (ce qui est important si vous en avez d'énormes, comme beaucoup d'entreprises)
ajouté l'auteur gbjbaanb, source
Je suis d'accord. J'utilise SVN et GIT (depuis environ 6 mois). J'adore git beaucoup plus que jamais SVN. Il faut juste du temps pour l'apprendre. Le plus grand saut pour moi (le moment où j'ai vu la lumière: P) a été quand j'ai finalement réalisé que je devais arrêter d'essayer d'utiliser GIT de la manière dont SVN travaillait. Puis tout est tombé en place;)
ajouté l'auteur Blizz, source
Bien que l'apprentissage de tous les Git serait beaucoup plus difficile, les bases sont presque identiques. La portée de l'apprentissage n'est pas si forte que ça jusqu'à ce que vous soyez dans les choses les plus avancées, ce que SVN n'est tout simplement pas capable de faire.
ajouté l'auteur sebnow, source
Je suis un utilisateur SVN, mais - essayez ceci: code.google.com/p/tortoisegit
ajouté l'auteur DiGi, source
J'aime git, mais il m'a fallu environ six mois d'utilisation quotidienne pour vraiment l'utiliser efficacement. Cela étant dit, j'utilise une combinaison du shell git (invite de commande) de msysgit, git gui et gitk de msysgit, et TortoiseGit. Je pense que TortoiseGit est génial, mais je ne comprends pas pourquoi plus de gens ne l'utilisent pas. Je sais que les responsables de msysgit détestent TortoiseGit pour diverses raisons, dont certaines sont idéologiques, et cela peut avoir quelque chose à voir avec cela. TortoiseGit est un secret bien gardé!
ajouté l'auteur Jim Raden, source

Tout dépend de la facilité d'utilisation et des étapes nécessaires pour faire quelque chose.

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

Si c'était juste 2 personnes, je dirais que git est aussi plus facile, parce que vous pouvez simplement pousser et tirer l'un sur l'autre.

Une fois que vous aurez dépassé ce stade, je ferai de la subversion, car à ce stade, vous devez configurer un serveur ou un emplacement «dédié».

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

SVN a également l'avantage de meilleurs outils d'interface graphique, mais l'écosystème git semble rattraper rapidement, donc je ne m'inquiéterais pas à long terme.

0
ajouté
L'argument "topic branch for experimentation" est souvent mis en avant en faveur de git, mais honnêtement, je n'ai jamais vu quelqu'un réellement le faire dans Subversion ou un autre système non-DVCS. Peut-être que c'est un gros problème et que nous manquons tous, mais d'après ce que j'ai vu, 99% des développeurs (y compris moi-même) ne se soucient pas des branches thématiques car ils ne les utilisent jamais! - Vous ne pouvez pas manquer ce que vous n'avez jamais eu :-). Je pense que si les gens du DVCS mettent en avant des «branches thématiques», ils doivent commencer par convaincre
ajouté l'auteur Orion Edwards, source
Le "découpage des choses éditées en plus petits commits", encore une fois, est quelque chose qui semble bien en théorie. Mais, au cours des 3 dernières années, je n'ai jamais pensé "oh, j'aurais aimé pouvoir faire ça", et j'ai du mal à trouver une situation hypothétique où je pourrais vouloir la fonctionnalité. .. Beaucoup de défenseurs git / DVCS disent simplement "nous avons X et X est génial" et tout le monde est assis là, se demandant pourquoi diable ils auraient jamais besoin de X
ajouté l'auteur Orion Edwards, source
La séparation entre commettre et publier dans Git est un avantage à mon humble avis plutôt qu'un désavantage.
ajouté l'auteur Jakub Narębski, source
Ok, alors comment évaluez-vous la "facilité d'utilisation / les étapes nécessaires pour faire quelque chose" pour SVN quand: - créer une branche sujet pour l'expérimentation - fusionner cette branche dans une autre branche - scinder les trucs édités dans un fichier dans leurs propres petits commits - vérifier rapidement une branche principale pour faire une petite correction IMHO Je ne vois pas comment la mise en place d'un serveur SVN est plus facile que la configuration de votre serveur git. Et pourquoi vous voudriez abandonner tous les avantages des branches légères pour ne pas avoir à pous
ajouté l'auteur Sam, source

Eh bien, c'est distribué. Les benchmarks indiquent qu'il est considérablement plus rapide (étant donné sa nature distribuée, les opérations comme les diffs et les logs sont tous locaux donc bien sûr c'est plus rapide dans ce cas), et les dossiers de travail sont plus petits (ce qui me bouleverse toujours).

Lorsque vous travaillez sur subversion, ou sur tout autre système de contrôle de révision client / serveur, vous créez essentiellement des copies de travail sur votre machine grâce aux révisions check-out . Cela représente un instantané de l'apparence du référentiel. Vous mettez à jour votre copie de travail via des mises à jour et vous mettez à jour le référentiel via des validations.

Avec un contrôle de version distribué, vous n'avez pas d'instantané, mais plutôt l'ensemble de la base de code. Vous voulez faire un diff avec une version de 3 mois? Pas de problème, la version de 3 mois est toujours sur votre ordinateur. Cela ne signifie pas seulement que les choses sont beaucoup plus rapides, mais si vous êtes déconnecté de votre serveur central, vous pouvez toujours effectuer de nombreuses opérations auxquelles vous êtes habitué. En d'autres termes, vous n'avez pas seulement un instantané d'une révision donnée, mais l'ensemble de la base de code.

On pourrait penser que Git prendrait beaucoup d'espace sur votre disque dur, mais à partir de quelques benchmarks que j'ai vu, ça prend moins. Ne me demande pas comment. Je veux dire, il a été construit par Linus, il sait une chose ou deux sur les systèmes de fichiers, je suppose.

0
ajouté
La raison pour laquelle Git peut prendre moins d'espace disque pour le dépôt complet que Subversion pour la simple extraction est que Subversion stocke la "copie vierge" pour faire fonctionner svn diff (comparaison avec la dernière version) ... et que le dépôt git est compressé (et deltaified ).
ajouté l'auteur Jakub Narębski, source
Je ne suis pas surpris que les "dossiers de travail" (c'est-à-dire les repos) soient plus petits que les copies de travail svn car même les repos svn sont plus petits que les copies de travail svn.
ajouté l'auteur R. Martinho Fernandes, source

Grâce au fait qu'il n'a pas besoin de communiquer constamment avec un serveur central, à peu près toutes les commandes s'exécutent en moins d'une seconde (évidemment les push / pull / fetch sont plus lents simplement parce qu'ils doivent initialiser les connexions SSH). L'embranchement est beaucoup plus facile (une simple commande à ramifier, une simple commande à fusionner)

0
ajouté

Google Tech Talk: Linus Torvalds sur git

http://www.youtube.com/watch?v=4XpnKHJAok8

La page de comparaison de Git Wiki

http://git.or.cz/gitwiki/GitSvnComparsion

0
ajouté
J'apprécie cette vidéo de Linus Torvalds, mais il laisse entendre que git est distribué, pas centralisé, et c'est juste faux. Il peut être utilisé de manière distribuée, OU de manière centralisée. Vous pouvez avoir un référentiel central auquel tout le monde adhère, comme dans SVN. C'est juste que vous n'avez pas à le faire de cette façon.
ajouté l'auteur MatrixFrog, source
@MatrixForog: Je pense que dans ce cas, "décentralisé" n'est pas le opposé de "centralisé" mais vraiment un surensemble. C'est comme "mobile" et "immobile" - juste parce que quelque chose est "mobile" ne me ne peut pas rester immobile.
ajouté l'auteur Tikhon Jelvis, source
Celui-ci est plutôt sympa aussi. Son de l'un des commit git et il explique de nombreuses fonctionnalités avancées comme la division de grands commits en plus petits. youtube.com/watch?v=j45cs5_nY2k
ajouté l'auteur schoetbi, source
La conversation de Linus est amusante à regarder. Il déchire brutalement des systèmes de contrôle de version centralisés comme Subversion et CVS. Cependant, parler youtube.com/watch?v=8dhZ9BXQgc4 de Randal Schwartz est plus constructif , plus informatif et plus convaincant.
ajouté l'auteur bendin, source

Une des choses à propos de SubVersion qui m'irrite, c'est qu'il place son propre dossier dans chaque répertoire d'un projet, alors que git n'en met qu'un dans le répertoire racine. Ce n'est pas un gros problème, mais de petites choses comme ça s'additionnent.

Bien sûr, SubVersion a Tortoise, ce qui est [habituellement] très agréable.

0
ajouté
le .svn dirs sera bientôt parti, probablement avec v1.7
ajouté l'auteur gbjbaanb, source

C'est la mauvaise question à poser. Il est trop facile de se concentrer sur les verrues de git et de formuler un argument sur les raisons pour lesquelles la subversion est ostensiblement meilleure, au moins pour certains cas d'utilisation. Le fait que git ait été conçu à l'origine comme un jeu de construction de contrôle de version de bas niveau et possède une interface baroque-orientée développeur baroque facilite la guerre et la légitimité perçue. Les partisans de Git frappent le tambour avec des millions d'avantages de workflow, que les gars svn proclament inutiles. Bientôt tout le débat est encadré comme centralisé vs distribué, ce qui sert les intérêts de la communauté de l'entreprise svn outil. Ces sociétés, qui publient généralement les articles les plus convaincants sur la supériorité de la subversion dans l'entreprise, dépendent de l'insécurité perçue de git et de la capacité d'entreprise de svn pour le succès à long terme de leurs produits.

Mais voici le problème: Subversion est une impasse architecturale .

Considérant que vous pouvez prendre git et construire un remplacement de subversion centralisé assez facilement, même si vous êtes là depuis plus de deux fois, svn n'a jamais été capable d'obtenir un même basique de suivi de travail aussi bien que git. Une raison fondamentale à cela est la décision de conception de faire des branches les mêmes que les répertoires. Je ne sais pas pourquoi ils sont partis de cette façon à l'origine, cela rend les retraits partiels très simples. Malheureusement, il est également impossible de suivre l'historique correctement. Maintenant, évidemment, vous êtes censé utiliser des conventions de mise en page de référentiel subversion pour séparer les branches des répertoires normaux, et svn utilise des heuristiques pour faire fonctionner les choses dans les cas d'utilisation quotidiens. Mais tout cela ne fait que se contenter d'une décision de conception de bas niveau très médiocre et limitée. Être capable de faire un diff au niveau du dépôt (plutôt que diff répertoire) est une fonctionnalité de base et critique pour un système de contrôle de version, et simplifie grandement les internes, ce qui rend possible de construire des fonctionnalités plus intelligentes et utiles sur le dessus. Vous pouvez voir dans la quantité d'effort qui a été mis dans l'extension de la subversion, et pourtant jusqu'à quel point il est derrière la récolte actuelle de VCS modernes en termes d'opérations fondamentales comme la résolution de fusion.

Maintenant, voici mon conseil sincère et agnostique pour tous ceux qui croient encore que Subversion est assez bon pour l'avenir prévisible:

Subversion ne rattrapera jamais les nouvelles races de VCS qui ont appris des erreurs de RCS et CVS; c'est une impossibilité technique à moins de rééquiper le référentiel de fond en comble, mais ce ne serait pas vraiment svn ça? Peu importe à quel point vous pensez que vous ne possédez pas les capacités d'un VCS moderne, votre ignorance ne vous protégera pas des pièges de Subversion, dont beaucoup sont des situations qui sont impossibles ou facilement résolues dans d'autres systèmes.

Il est extrêmement rare que l'infériorité technique d'une solution soit aussi nette qu'elle l'est avec svn, certainement je ne dirais jamais une telle opinion sur win-vs-linux ou emacs-vs-vi, mais dans ce cas c'est tellement clearcut, et le contrôle de la source est un outil si fondamental dans l'arsenal du développeur, que je pense qu'il doit être déclaré sans équivoque. Indépendamment de l'exigence d'utiliser svn pour des raisons d'organisation, j'implore tous les utilisateurs svn de ne pas laisser leur esprit logique construire une fausse croyance que les VCS plus modernes ne sont utiles que pour les grands projets open-source. Quelle que soit la nature de votre travail de développement, si vous êtes programmeur, vous serez un programmeur plus efficace si vous apprenez à utiliser des VCS de meilleure qualité, que ce soit Git, Mercurial, Darcs ou bien d'autres.

0
ajouté

Git rend également la ramification et la fusion vraiment facile. Subversion 1.5 vient de rajouter un suivi de fusion, mais Git est encore meilleur. Avec Git branchement est très rapide et bon marché. Cela rend la création d'une branche pour chaque nouvelle fonctionnalité plus réalisable. Les dépôts Oh et Git sont très efficaces avec l'espace de stockage comparé à Subversion.

0
ajouté

Quelques réponses y ont fait allusion, mais je veux expliciter 2 points:

1) La possibilité de faire des validations sélectives (par exemple, git add --patch ). Si votre répertoire de travail contient plusieurs changements qui ne font pas partie du même changement logique, Git rend très facile de faire un commit qui ne comprend qu'une partie des changements. 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 grandement la capacité du développeur à «s'engager tôt, à s'engager souvent».

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

0
ajouté
@schoetbi Non, la tête du référentiel est comme avant. Le dépôt lui-même contient maintenant deux commits, alors que ce serait bien si aucun d'eux n'était là. C'est l'encombrement supplémentaire qui vous ralentit lorsque vous regardez à travers les journaux. Bien sûr, cela peut arriver avec git aussi, surtout si certains développeurs ont l'habitude de pousser immédiatement après avoir commis. Mais c'est beaucoup plus facile à éviter en git.
ajouté l'auteur MatrixFrog, source
Re 1) Si vous utilisez TortoiseSVN, AnkhSVN, etc., il est très facile (trivial) de sélectionner les fichiers avec les changements à commettre. Re 2) Si vous ne voulez pas que d'autres devs obtiennent votre code, créez une branche et fusionnez quand c'est prêt, ce n'est pas difficile.
ajouté l'auteur si618, source
irrévocable? Eh bien, vous pouvez inverser fusionner le commit défectueux et le dépôt est comme avant. Mais vous avez raison, c'est documenté. Mais est-ce bon ou mauvais? Je suppose que ça dépend ...
ajouté l'auteur schoetbi, source

Premièrement, le contrôle de la version simultanée semble être un problème facile à résoudre. Ce n'est pas du tout. En tous cas...

SVN est assez non-intuitif. Git est encore pire. [sarcastique-spéculation] Cela peut être dû au fait que les développeurs, qui aiment les problèmes difficiles comme le contrôle de version simultané, n'ont pas beaucoup d'intérêt à faire une bonne interface utilisateur. [/ Sarcastic-spéculation]

Les partisans de SVN pensent qu'ils n'ont pas besoin d'un système distribué de contrôle de version. Je le pensais aussi. Mais maintenant que nous utilisons exclusivement Git, je suis un croyant. Maintenant, le contrôle de version fonctionne pour moi et l'équipe / projet au lieu de simplement travailler pour le projet. Quand j'ai besoin d'une branche, je branche. Parfois, c'est une branche qui a une branche correspondante sur le serveur, et parfois ce n'est pas le cas. Sans parler de tous les autres avantages que je vais devoir étudier (merci en partie à l'absence mystérieuse et absurde d'interface utilisateur qui est un système de contrôle de version moderne).

0
ajouté

Toutes les réponses sont comme prévu, centré sur le programmeur, mais que se passe-t-il si votre entreprise utilise le contrôle des révisions en dehors du code source? Il y a beaucoup de documents qui ne sont pas du code source qui bénéficient du contrôle de version, et devraient vivre à proximité du code et pas dans un autre CMS. La plupart des programmeurs ne travaillent pas de manière isolée - 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 dans lequel un système de contrôle de révision distribué any sera plus facile à utiliser ou à expliquer à un non-programmeur. J'adorerais avoir tort, parce que je serais capable d'évaluer git et espérer en fait être accepté par les gens qui ont besoin de contrôle de version et qui ne sont pas des programmeurs.

Même alors, 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é, il me serait difficile de donner une réponse honnête, car nous n'en avons pas besoin.

Disclaimer: Je me suis intéressé à Subversion dès le début (autour de v0.29) donc évidemment je suis partial, mais les entreprises pour lesquelles j'ai travaillé depuis ce temps profitent de mon enthousiasme parce que j'ai encouragé et soutenu son utilisation. Je soupçonne que c'est ainsi que cela se passe avec la plupart des sociétés de logiciels. Avec tant de programmeurs qui sautent sur le train en marche, je me demande combien d'entreprises vont passer à côté des avantages de l'utilisation du contrôle de version en dehors du code source? Même si vous disposez de systèmes distincts pour différentes équipes, vous manquez certains avantages, tels que l'intégration du suivi des problèmes (unifié), tout en augmentant les besoins de maintenance, de matériel et de formation.

0
ajouté
De toute façon, les non-programmeurs auront déjà des problèmes de subversion. Il vaudrait beaucoup mieux leur donner une application de publication de documents qui a un contrôle de version plutôt que d'utiliser un svn-GUI. Pourquoi ne pas écrire les documents dans un wiki avec des révisions. Il y a même quelques wikis alimentés par git qui utilisent git comme stockage de données. Les programmeurs devraient avoir le meilleur outil pour le travail, et c'est git ou Hg en raison de la liberté de workflow.
ajouté l'auteur Keyo, source
Par exemple, je veux dire l'intégration dans Windows (TortoiseSVN) et Visual Studio (AnkhSVN). Est-ce que tous les développeurs aiment aller à la ligne de commande au lieu d'une interface graphique ou d'un IDE? Ce que je dis est que je ne pense pas que vous pouvez catégoriquement déclarer que git / Hg est le meilleur outil pour le travail, parce que si les gens n'aiment pas le client VCS, ils ne vont pas utiliser l'outil, pas importe combien de liberté cela donne à votre flux de travail.
ajouté l'auteur si618, source
@ Keyo, oui c'est vrai que les non-programmeurs prendront du temps pour obtenir Subversion, mais je pense qu'ils prendront plus de temps avec git ou Hg. Les Wiki sont parfaits s'ils sont maintenus, mais dans mon expérience, les développeurs sont plus susceptibles de maintenir des documents qui sont liés au code source s'ils sont proches de ce code source. Je suis d'accord avec Inger parce qu'il n'y a pas beaucoup de documents qui correspondent à cette catégorie, mais ils existent certainement. Il est intéressant que vous disiez que git / Hg est le meilleur outil pour le travail, c'est une décl
ajouté l'auteur si618, source
@inger Je ne pense pas que vous pouvez dire "c'est la seule raison valable", AFAIK outing support pour Subversion est de loin supérieur à Git, par exemple. TortoiseSVN et intégration avec Visual Studio et Java IDE comme Eclipse. Ce n'est peut-être pas un problème pour vous, mais c'est certainement pour nous. Je ne l'ai pas mentionné dans ma réponse parce que c'est une question distincte.
ajouté l'auteur si618, source
À mon humble avis, c'est la seule raison valable de favoriser SVN. En bref, il est plus facile d'expliquer à un non-programmeur, c'est-à-dire quelqu'un qui s'attendait à l'utiliser de façon linéaire et d'éviter les scénarios VC complexes (= réels): conflits, fusion à trois voies, branches. ne veux jamais laisser le VCS fusionner un fichier de présentation PowerPoint de toute façon ..
ajouté l'auteur inger, source
"La plupart des programmeurs ne travaillent pas de manière isolée" semble suggérer que les comptables / responsables du marketing devraient utiliser le même référentiel où le code source est conservé. Je ne vois pas les avantages de cela; Certaines de mes anciennes entreprises voulaient standardiser des choses comme ça, mais cela a inévitablement échoué. Je pense que l'approche simpliste peut être géniale pour le manager mais simplifier à l'extrême pour les équipes de programmeurs - donc unifier cela conduit à un mauvais compromis.
ajouté l'auteur inger, source
Pour les documents qui vont avec le logiciel, vous avez raison - ils devraient être versionnés ensemble. J'ai trouvé que ceux-ci beaucoup moins que les gens pensent initialement (nous avons fini par jeter dehors un docs d'arbre énorme du repo de source). En outre, il y a beaucoup à faire pour simplifier les flux de travail des rédacteurs techniques, etc., si cela devait poser un problème (cela ne devrait pas être le cas).
ajouté l'auteur inger, source

Easy Git has a nice page comparing actual usage of Git and SVN which will give you an idea of what things Git can do (or do more easily) compared to SVN. (Technically, this is based on Easy Git, which is a lightweight wrapper on top of Git.)

0
ajouté

Eric Sink from SourceGear wrote series of articles on differences between distributed and nondistributed version controls systems. He compares pros and cons of most popular version control systems. Very interesting reading.
Articles can be found on his blog, www.ericsink.com:

0
ajouté

La chose amusante est: J'héberge des projets dans Subversion Repos, mais j'y accède via la commande Git Clone.

Please read Develop with Git on a Google Code Project

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

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

  1. Je peux travailler distribué sur plusieurs machines, engageant et tirant de et à eux
  2. J'ai un référentiel svn central backup / public que les autres peuvent consulter
  3. Et ils sont libres d'utiliser Git pour leur propre compte
0
ajouté
c'est un peu démodé, le code Google fait du mercurial donc il n'y a plus besoin de ce hack
ajouté l'auteur Sam Saffron, source
@Sam sauf si vous aimez git et / ou n'aimez pas mercurial.
ajouté l'auteur MatrixFrog, source

J'ai récemment habité dans la terre de Git, et je l'aime pour des projets personnels, mais je ne pourrais pas encore passer des projets de travail de Subversion étant donné le changement dans la pensée du personnel requis, sans avantages pressants. De plus, le plus gros projet que nous réalisons en interne dépend énormément de svn: externals qui, d'après ce que j'ai vu jusqu'ici, ne fonctionne pas si bien et parfaitement dans Git.

0
ajouté

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

Brièvement:

  • Git tracks content rather than files
  • Branches are lightweight et merging is easy, et I mean really easy.
  • It's distributed, basically every repository is a branch. It's much easier to develop concurrently et collaboratively than with Subversion, in my opinion. It also makes offline development possible.
  • It doesn't impose any workflow, as seen on the above linked website, there are many workflows possible with Git. A Subversion-style workflow is easily mimicked.
  • Git repositories are much smaller in file size than Subversion repositories. There's only one ".git" directory, as opposed to dozens of ".svn" repositories (note Subversion 1.7 et higher now uses a single directory like Git.)
  • The staging area is awesome, it allows you to see the changes you will commit, commit partial changes et do various other stuff.
  • Stashing is invaluable when you do "chaotic" development, or simply want to fix a bug while you're still working on something else (on a different branch).
  • You can rewrite history, which is great for preparing patch sets et fixing your mistakes (before you publish the commits)
  • ? et a lot more.

Il y a quelques inconvénients:

  • There aren't many good GUIs for it yet. It's new et Subversion has been around for a lot longer, so this is natural as there are a few interfaces in development. Some good ones include TortoiseGit et GitHub for Mac.
  • Partial checkouts/clones of repositories are not possible at the moment (I read that it's in development). However, there is submodule support. Git 1.7+ supports sparse checkouts.
  • It might be harder to learn, even though I did not find this to be the case (about a year ago). Git has recently improved its interface et is quite user friendly.

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

Where Git really shines is branching et working with other people.

0
ajouté
ajouté l'auteur Zaz, source
@awe, c'est ce qu'on appelle le suivi de fichiers. essayez de renommer le fichier ou de le déplacer manuellement ailleurs (même contenu, nouveau fichier (à cause du nouveau chemin / nom)]: le SVN saura-t-il que c'est le même fichier et conserver les innombrables révisions que vous lui avez apportées? non, je suppose que non.
ajouté l'auteur Filip Dupanović, source
Vous dites que GIT suit le contenu plutôt que les fichiers. J'ai découvert que SVN le fait aussi: je viens d'apporter des modifications à un fichier et de le sauvegarder. SVN a montré le fichier en rouge (changé). Ensuite, j'ai fait défaire dans l'éditeur et l'a enregistré à nouveau. SVN a ensuite mis à jour le statut en vert (non modifié) même si le fichier a été modifié (changement de date plus récent) mais le SVN a reconnu que le contenu n'a pas été modifié par rapport à l'original.
ajouté l'auteur awe, source
svn suit-il les changements sur les fichiers?
ajouté l'auteur Seun Osewa, source

Pourquoi je pense que Subversion est meilleur que Git (au moins pour les projets sur lesquels je travaille), principalement en raison de sa facilité d'utilisation et de son flux de travail plus simple:

http://www.databasesandlife.com/why-subversion-is- mieux-que-git /

0
ajouté

I think Subversion is fine.. until you start merging.. or doing anything complicated.. or doing anything Subversion thinks is complicated (like doing queries to find out which branches messed with a particular file, where a change actually comes from, detecting copy&pastes, etc)...

Je suis en désaccord avec la réponse gagnante, disant que le principal avantage de GIT est le travail hors ligne - c'est certainement utile, mais c'est plus comme un extra pour mon cas d'utilisation. SVK peut aussi fonctionner hors ligne, mais il n'y a pas de question pour moi sur laquelle investir mon temps d'apprentissage).

C'est juste que c'est incroyablement puissant et rapide et, bien - après s'être habitué aux concepts - très utile (oui, dans ce sens: convivial).

For more details on a merging story, see this : Using git-svn (or similar) *just* to help out with an svn merge?

0
ajouté

Git et DVCS en général sont parfaits pour les développeurs qui font beaucoup de codage indépendamment les uns des autres parce que tout le monde a sa propre succursale. Si vous avez besoin d'un changement de quelqu'un d'autre, cependant, elle doit s'engager à son repo local et ensuite elle doit vous pousser ce changeset ou vous devez le retirer d'elle.

Mon propre raisonnement me fait aussi penser que DVCS rend les choses plus difficiles pour l'assurance qualité et la gestion des versions si vous faites des choses comme des versions centralisées. Quelqu'un doit être responsable de faire ce push / pull à partir du référentiel de tout le monde, résoudre les conflits qui auraient été résolus au moment de la validation initiale, puis faire la construction, puis demander à tous les autres développeurs de resynchroniser leurs repos.

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

0
ajouté
En fait, si vous pensez que le noyau Linux ou le projet git lui-même est géré, vous verrez que Git est très bon pour le workflow 'mainteneur unique' (ou mainteneur + lieutenants), avec un référentiel centralisé par consens. Et il est facile de passer temporairement à quelqu'un d'autre en tant que responsable.
ajouté l'auteur Jakub Narębski, source

Les principaux points que j'aime à propos de DVCS sont les suivants:

  1. Vous pouvez commettre des choses cassées. Cela n'a pas d'importance parce que les autres peuples ne les verront pas avant de publier. L'heure de publication est différente du temps de validation.
  2. Pour cette raison, vous pouvez vous engager plus souvent.
  3. Vous pouvez fusionner la fonctionnalité complète. Cette fonctionnalité aura sa propre branche. Tous les commits de cette branche seront liés à cette fonctionnalité. Vous pouvez le faire avec un CVCS mais avec DVCS c'est la valeur par défaut.
  4. Vous pouvez rechercher votre historique (trouver quand une fonction a changé)
  5. Vous pouvez annuler une extraction si quelqu'un bousille le dépôt principal, vous n'avez pas besoin de réparer les erreurs. Effacer la fusion.
  6. Lorsque vous avez besoin d'un contrôle de source dans un répertoire, faites: git init. et vous pouvez commettre, annuler des changements, etc ...
  7. C'est rapide (même sous Windows)

La raison principale d'un projet relativement important est l'amélioration de la communication créée par le point 3. D'autres sont de bons bonus.

0
ajouté
+1 "Vous pouvez commettre des choses cassées." est la principale raison pour laquelle je considère passer de gn à svn. Je déteste toujours quand je suis en train de développer un lourd bloc de code, et je n'ai pas le filet de sécurité de VCS (tout simplement parce que mes modifications ne fonctionnent pas encore, donc je ne suis pas autorisé à commettre).
ajouté l'auteur András Szepesházi, source
Merci, vous avez raison. Fixé.
ajouté l'auteur Emmanuel Caradec, source
Je pense que le point # 1 a l'intention de dire "les autres ne les verront pas jusqu'à ce que vous publiez " (ou "push").
ajouté l'auteur jackr, source

Subversion est toujours un système de contrôle de version beaucoup plus utilisé, ce qui signifie qu'il a un meilleur support d'outil. Vous trouverez des plugins SVN matures pour presque tous les IDE , et il existe de bonnes extensions d'explorateur disponibles ( comme TurtoiseSVN). A part ça, je vais être d'accord avec Michael : Git n'est pas meilleur ou pire que Subversion , c'est différent.

0
ajouté
Mais maintenant, après avoir longuement utilisé git pendant quelques années, je dois être en désaccord avec moi-même: Git est bien meilleur que Subversion. Au moins une fois que vous aurez fini la syntaxe hostile de Git.
ajouté l'auteur neu242, source

D'autres réponses ont bien expliqué les principales fonctionnalités de Git (qui sont géniales). Mais il y a aussi tellement de petits moyens que Git se comporte mieux et contribue à rendre ma vie plus saine. Voici quelques petites choses:

  1. Git has a 'clean' command. SVN desperately needs this command, considering how frequently it will dump extra files on your disk.
  2. Git has the 'bisect' command. It's nice.
  3. SVN creates .svn directories in every single folder (Git only creates one .git directory). Every script you write, and every grep you do, will need to be written to ignore these .svn directories. You also need an entire command ("svn export") just to get a sane copy of your files.
  4. In SVN, each file & folder can come from a different revision or branch. At first, it sounds nice to have this freedom. But what this actually means is that there is a million different ways for your local checkout to be completely screwed up. (for example, if "svn switch" fails halfway through, or if you enter a command wrong). And the worst part is: if you ever get into a situation where some of your files are coming from one place, and some of them from another, the "svn status" will tell you that everything is normal. You'll need to do "svn info" on each file/directory to discover how weird things are. If "git status" tells you that things are normal, then you can trust that things really are normal.
  5. You have to tell SVN whenever you move or delete something. Git will just figure it out.
  6. Ignore semantics are easier in Git. If you ignore a pattern (such as *.pyc), it will be ignored for all subdirectories. (But if you really want to ignore something for just one directory, you can). With SVN, it seems that there is no easy way to ignore a pattern across all subdirectories.
  7. Another item involving ignore files. Git makes it possible to have "private" ignore settings (using the file .git/info/exclude), which won't affect anyone else.
0
ajouté
Un d. 7. Avec git moderne, vous pouvez également avoir un paramètre d'ignorance "private" par utilisateur en utilisant la variable de configuration core.excludesFile dans ~ .gitignore (voir man git-config).
ajouté l'auteur Jakub Narębski, source
@Chris: Vous pouvez le faire explicitement: git mv et git rm .
ajouté l'auteur R. Martinho Fernandes, source
J'aimerais aussi voir l'option d'un seul répertoire .svn par copie de travail, mais pour l'enregistrement: Pour # 3: La plupart des outils vont (par défaut) ignorer les répertoires .svn. Pour # 6: Vous pouvez définir des propriétés de manière récursive.
ajouté l'auteur si618, source
Re # 5: Bien que ce soit normalement vrai, parfois Git fait tout ça. Au moins avec Subversion, les problèmes dus au déplacement ou à la suppression sont presque invariablement un PEBKAC. Bien qu'il soit agréable d'avoir un suivi de déplacement / suppression automatique, j'apprécierais au moins la possibilité d'indiquer explicitement ce que je fais aux fichiers dans le référentiel, même si je n'ai pas besoin de l'utiliser.
ajouté l'auteur Chris Charabaruk, source
3: "un seul répertoire .svn" sera ici avec SVN 1.7 lorsque WC-NG est implémént. 1: Pour obtenir le nettoyage SVN, vous «exportez» par-dessus votre WC. 5: ce n'est pas si facile, si vous renommez un fichier, le reconnait-il et garde-t-il l'historique, ou le traite-t-il comme un ajout et une suppression dans le répertoire? 6/7: svn a global-ignore par paramètre de client d'utilisateur.
ajouté l'auteur gbjbaanb, source
Pour ma part, je m'en fous de la distribution de git. Mais c'est précisément à cause de ces petites choses, en particulier # 3 et # 5, que je suis passé à git.
ajouté l'auteur CodesInChaos, source
Il y a svn-bisect. C'est maladroit, mais c'est et ça marche.
ajouté l'auteur sanmai, source
Re: # 3 "chaque grep que vous faites": vous avez besoin de "ack": betterthangrep.com
ajouté l'auteur janmoesen, source
J'ai rencontré des problèmes # 4, # 6 et # 7 avec svn. +1 pour les signaler w.r.t. git.
ajouté l'auteur Sushant, source
Je ne comprends pas comment # 3 et # 5 sont tous deux vrais ... il me semble que le point d'avoir un .svn dans chaque dossier serait de déplacer des choses de façon transparente, et avec un emplacement central, il est beaucoup plus difficile de suivre mouvements...
ajouté l'auteur Dan, source
Je pense que # 5 est un contrepoint parfait à l'argument "git est plus difficile à apprendre que svn". J'ai vu tant de débutants de contrôle de source se faire paralyser par cela. Ils svn ajoutent un fichier, font un peu plus de travail, décident de supprimer le fichier et tout explose à leur guise lorsqu'ils lancent svn ci .
ajouté l'auteur Sharpie, source

J'aime Git parce qu'il aide réellement le développeur de communication à développer sur une équipe moyenne à grande. En tant que système de contrôle de version distribué, il aide les développeurs à créer un éco-système de code source qui aide à gérer un grand nombre de développeurs travaillant sur un seul projet.

Par exemple, dites que vous faites confiance à 5 développeurs et que vous tirez seulement les codes de leur dépôt. Chacun de ces développeurs a son propre réseau de confiance d'où ils tirent des codes. Ainsi, le développement est basé sur cette structure de confiance des développeurs où la responsabilité du code est partagée entre la communauté de développement.

Bien sûr, il y a d'autres avantages qui sont mentionnés dans d'autres réponses ici.

0
ajouté

Subversion est très facile à utiliser. Je n'ai jamais trouvé dans les dernières années un problème ou que quelque chose ne fonctionne pas comme prévu. Il y a aussi beaucoup d'excellents outils GUI et le support pour l'intégration SVN est grand.

Avec Git, vous obtenez un VCS plus flexible. Vous pouvez l'utiliser de la même manière que SVN avec un dépôt distant où vous validez toutes les modifications. Mais vous pouvez également l'utiliser principalement hors ligne et ne pousser les modifications que de temps en temps vers le dépôt distant. Mais Git est plus complexe et a une courbe d'apprentissage plus raide. Je me suis retrouvé dans la première fois à commettre de mauvaises branches, à créer des branches indirectement ou à recevoir des messages d'erreur avec peu d'informations sur l'erreur et où je dois chercher avec Google pour obtenir de meilleures informations. Certaines choses simples comme la substitution de marqueurs ($ Id $) ne fonctionnent pas mais GIT dispose d'un mécanisme de filtrage et de crochet très flexible pour fusionner ses propres scripts et ainsi obtenir tout ce dont vous avez besoin, mais il faut plus de temps et de documentation ;)

Si vous travaillez principalement hors connexion avec votre référentiel local, vous n'avez aucune sauvegarde si quelque chose est perdu sur votre machine locale. Avec SVN vous travaillez principalement avec un référentiel distant qui est aussi en même temps votre sauvegarde sur un autre serveur ... Git peut fonctionner de la même manière, mais ce n'était pas le but principal de Linus d'avoir quelque chose comme SVN2. Il a été conçu pour les développeurs de noyau Linux et les besoins d'un système de contrôle de version distribué.

Est-ce que Git est meilleur que SVN? Les développeurs qui n'ont besoin que d'un peu d'historique des versions et d'un mécanisme de sauvegarde ont une vie facile et facile avec SVN. Les développeurs travaillant souvent avec des filiales, testant plusieurs versions en même temps ou travaillant principalement hors ligne peuvent bénéficier des fonctionnalités de Git. Il y a quelques fonctionnalités très utiles comme le cachetage non trouvé avec SVN qui peut rendre la vie plus facile. Mais de l'autre côté, tout le monde n'aura pas besoin de toutes les fonctionnalités. Donc, je ne peux pas voir les morts de SVN.

Git a besoin d'une meilleure documentation et les rapports d'erreurs doivent être plus utiles. De plus, les interfaces graphiques utiles existantes sont rarement disponibles. Cette fois, j'ai seulement trouvé 1 interface graphique pour Linux avec le support de la plupart des fonctionnalités de Git (git-cola). L'intégration d'Eclipse fonctionne mais elle n'est pas officielle et il n'y a pas de site de mise à jour officiel (seulement un site de mise à jour externe avec des versions périodiques du tronc http://www.jgit.org/updates ) Donc, la façon la plus préférée d'utiliser Git aujourd'hui est la ligne de commande.

0
ajouté

J'adore pouvoir gérer les branches locales de mon code source dans Git sans bouleverser l'eau du dépôt central. Dans la plupart des cas, je vais vérifier le code du serveur Subversion et exécuter un dépôt Git local juste pour pouvoir le faire. C'est aussi génial que l'initialisation d'un dépôt Git ne pollue pas le système de fichiers avec un tas de dossiers .svn ennuyeux partout.

Et en ce qui concerne la prise en charge de l'outil Windows, TortoiseGit gère très bien les bases, mais je préfère toujours la ligne de commande, sauf si je veux voir le journal. J'aime vraiment la façon dont Tortoise {Git | SVN} aide lors de la lecture des logs de commit.

0
ajouté

David Richards WANdisco Blog sur Subversion / GIT

L'émergence de GIT a apporté une race de fondamentalistes DVCS? les? Gitterons? ? que penser que tout autre que GIT est de la merde. Les Gitterons semblent penser que le génie logiciel se passe sur leur propre île et oublient souvent que la plupart des organisations n'emploient pas exclusivement des ingénieurs logiciels. C'est bon mais ce n'est pas ce que pense le reste du marché, et je suis heureux de le prouver: GIT, au dernier look, avait moins de trois pour cent du marché alors que Subversion a environ cinq millions d'utilisateurs et environ la moitié du marché global.

     

Le problème que nous avons vu était que les Gitteron tiraient (bon marché) sur Subversion. Tweets comme? Subversion est si [lent / merde / restrictive / ne sent pas bon / me regarde d'une drôle de façon] et maintenant j'ai GIT et [tout fonctionne dans ma vie / ma femme est tombée enceinte / j'ai une petite amie après 30 ans d'essai / j'ai gagné six fois sur la table de blackjack]. Vous obtenez l'image.

0
ajouté
Ironiquement, Git a été créé spécifiquement parce que le génie logiciel n'arrive pas sur les îles. Cette citation est débile.
ajouté l'auteur Ben Collins, source
Bien que j'utilise git je serais également très heureux de travailler avec n'importe quel DVCS décent comme Mercurial par exemple. Il faut du temps pour que le concept DVCS gagne en popularité et maintenant je vois un grand nombre de projets open source qui sont passés à git.
ajouté l'auteur Keyo, source
En dépeignant les détracteurs du SVN comme des fondamentalistes, David fait fi de la question fondamentale: l'architecture de la subversion est une impasse. Ce n'est pas que le git est l'extrémité-tout-soit-de-tout de VCS, il a ses verrues pour être sûrs, mais git, mercurial, darcs et beaucoup d'autres VCS ont tous des modèles de dépôt fondamentalement plus élégants. Subversion ne fera jamais de fusion parce que le modèle de répertoire == rend impossible une véritable progression. Des entreprises comme David peuvent continuer à coller de plus en plus de rouge à lèvres sur un cochon, mais svn t
ajouté l'auteur gtd, source
Notez que David Richards pourrait être impartial: le produit qu'il produit est basé sur Subversion (ou sur des idées Subversion), donc bien sûr il serait pro-Subversion et anti-Git.
ajouté l'auteur Jakub Narębski, source

Pour les personnes à la recherche d'une bonne interface graphique Git, Syntevo SmartGit pourrait être une bonne solution. Son propriétaire, mais gratuit pour une utilisation non commerciale, fonctionne sur Windows / Mac / Linux et supporte même SVN en utilisant une sorte de pont git-svn, je pense.

0
ajouté
Ça a l'air bien, ce serait génial s'ils avaient aussi SmartHg!
ajouté l'auteur Regent, source