Was kann SVN besser als Git? [geschlossen]

293

Keine Frage , dass die meisten Debatten über Programmierer Tools destillieren entweder auf persönliche Wahl (vom Benutzer) oder Design Betonung , das heißt , die Optimierung der Konstruktion nach bestimmten Fällen verwendet (durch den Werkzeugbauer). Texteditoren sind wahrscheinlich das prominenteste Beispiel - ein Programmierer, der bei der Arbeit unter Windows arbeitet und zu Hause in Haskell auf dem Mac programmiert , die plattformübergreifende Integration und die Compiler-Integration schätzt und sich daher für Emacs gegenüber TextMate usw. entscheidet.

Es kommt seltener vor, dass eine neu eingeführte Technologie den vorhandenen Optionen nachweislich überlegen ist.

Ist dies tatsächlich der Fall bei Versionskontrollsystemen (VCS), insbesondere bei zentralisierten VCS ( CVS und SVN ) im Vergleich zu verteilten VCS ( Git und Mercurial )?

Ich habe SVN etwa fünf Jahre lang verwendet, und SVN wird derzeit dort verwendet, wo ich arbeite. Vor etwas weniger als drei Jahren wechselte ich für alle meine persönlichen Projekte zu Git (und GitHub).

Ich kann mir eine Reihe von Vorteilen von Git gegenüber Subversion vorstellen (die größtenteils den Vorteilen von über zentralisiertes VCS verteiltem Git gegenüberstehen), aber ich kann mir kein Gegenbeispiel vorstellen - irgendeine Aufgabe (die relevant ist und in einem normalen Programmierer auftritt) Workflow), den Subversion besser macht als Git.

Die einzige Schlussfolgerung, die ich daraus gezogen habe, ist, dass ich keine Daten habe - nicht, dass Git besser ist usw.

Ich vermute, dass es solche Gegenbeispiele gibt, daher diese Frage.

Doug
quelle
3
@jokoon: Effizient in Bezug auf was? Sicherlich keine Geschwindigkeit, da selbst schnelles Ethernet im Vergleich zu lokalen Vorgängen langsam ist.
Maaartinus
4
Ich habe immer gedacht, Git sei hoch geschätzt. Es ist eine Modeerscheinung, und Programmierer sind nicht unempfindlich gegen Modeerscheinungen - trotz der vielen Widerstände gegen diesen Gedanken. Wie jeder andere auf dieser Welt möchte auch jeder das glänzende neue Spielzeug (Git). Git mag gut sein - oder für manche sogar großartig -, aber es war noch nie besser als SVN, wenn man objektiv denkt.
gekauft777
3
Ich fand SVN immer noch gut zu bedienen, die Lernkurve ist dann gut GIT.
Cheung
5
Diese Frage wurde kürzlich als primär meinungsbasiert zurückgestellt. Diese Klassifizierung ist falsch; Beachten Sie, dass die Frage für eine lange Zeit offen war; dass es viele Fragen zu den Vorzügen von DVCS gibt und dass die Frage nicht lautet, ob es besser ist (Meinung), sondern was es besser macht. Die Unterschiede sind keine Meinung, sondern ob das Gesamtprodukt ist - das ist knifflig (aber nicht der Punkt dieser Frage).
Eamon Nerbonne

Antworten:

207

Subversion ist ein zentrales Repository

Während viele Leute verteilte Repositorys wünschen, um die offensichtlichen Vorteile von Geschwindigkeit und Mehrfachkopien zu erzielen, gibt es Situationen, in denen ein zentrales Repository wünschenswerter ist. Wenn Sie beispielsweise einen kritischen Code haben, auf den niemand zugreifen soll, möchten Sie ihn wahrscheinlich nicht unter Git ablegen. Viele Unternehmen möchten ihren Code zentralisieren, und (glaube ich) alle (ernsthaften) Regierungsprojekte befinden sich in zentralen Repositories.

Subversion ist konventionelle Weisheit

Dies bedeutet, dass viele Leute (insbesondere Manager und Vorgesetzte) die Versionsnummern wie gewohnt eingeben und die Entwicklung als "einzelne Linie" betrachten, die sich in der Zeit in ihrem Gehirn festgeschrieben hat. Keine Beleidigung, aber Gits Liberalität ist nicht leicht zu schlucken. Das erste Kapitel eines Git-Buches sagt Ihnen, dass Sie alle herkömmlichen Ideale aus Ihrem Kopf streichen und neu beginnen müssen.

Subversion macht es in eine Richtung und sonst nichts

SVN ist ein Versionskontrollsystem. Es gibt einen Weg, seine Arbeit zu erledigen, und jeder tut es auf die gleiche Weise. Zeitraum. Dies erleichtert den Übergang zu / von SVN von / zu anderen zentralisierten VCS. Git ist nicht einmal ein reines VCS - es ist ein Dateisystem, es hat viele Topologien, um Repositorys in verschiedenen Situationen einzurichten - und es gibt keinen Standard. Das macht es schwieriger, eine zu wählen.

Weitere Vorteile sind:

  • SVN unterstützt leere Verzeichnisse
  • SVN bietet eine bessere Windows-Unterstützung
  • SVN kann einen Unterbaum auschecken / klonen
  • SVN unterstützt die exklusive Zugriffssteuerung, svn lockdie für schwer zusammenzuführende Dateien nützlich ist
  • SVN unterstützt einfacher Binärdateien und große Dateien (und erfordert nicht, dass alte Versionen überall kopiert werden).
  • Das Hinzufügen eines Commits erfordert erheblich weniger Schritte, da kein Pull / Push stattfindet und Ihre lokalen Änderungen immer implizit neu basieren svn update.
Treecoder
quelle
55
"Subversion macht es auf eine Art und Weise" - das habe ich mir auch gedacht, bis ich meinen jetzigen Job angefangen habe. In meinem aktuellen Job hat mein Chef, der behauptet, keine Vertrauensprobleme zu haben, den Server so konfiguriert, dass er gesperrt werden muss. In unserem System findet keine Zusammenführung statt. Dateien sind im Repository gesperrt, und niemand kann sie ohne die Sperre schreiben. Top-down-Kontrolle ist für diejenigen, deren Verfassungen dies verlangen, definitiv etwas, was SVN besser macht als Git.
Dan Ray
14
Ein Vorteil des zentralen Repository ist die einfache Sicherung. Wenn sich der gesamte eingecheckte Code an einem Ort befindet und an diesem Ort ein externes Backup vorhanden ist, verlieren Sie nicht alles, wenn Ihr Büro ausfällt. Bei einem DVCS gehen alle Daten verloren, die nicht auf den Server übertragen wurden, der außerhalb des Standorts gesichert wurde, es sei denn, Sie führen externe Sicherungen der Computer des Entwicklers durch.
Paul Tomblin
94
Warum kann git nicht zentral genutzt werden? Haben Sie nur ein zentrales Repository, und Ihre Entwickler können klonen und ziehen und pushen, als würden sie auschecken und aktualisieren und ein Commit ausführen.
David Thornley
29
@PaulTomblin - Je nach Workflow bietet Git bessere Backups. Zum Beispiel verwenden wir private Github-Repos und ich pushe meinen Code häufig auf Feature-Zweige. Wenn meine Kollegen dies tun git fetch origin, hat jeder von ihnen eine Sicherungskopie meines Codes zusammen mit der Sicherungskopie, die Github selbst bereitstellt. (Wir beschneiden regelmäßig zusammengeführte Zweige, sowohl lokal als auch auf Github.)
Nathan Long
52
Sie scheinen zu implizieren, dass Zentral für große Unternehmen oder Regierungsarbeit sicherer ist. Das stimmt einfach nicht. Wenn Sie eine Kopie des Codes auf Ihrem Computer haben, haben Sie eine Kopie des Codes. Es spielt keine Rolle, ob es sich um einen zentralen Server oder ein zentrales Dateisystem mit einem DVCS-Repository handelt.
John Fisher
131

Ein Vorteil von Subversion gegenüber Git ist , dass Subversion nur das Auschecken von Teilbäumen erlaubt. Bei Git ist das gesamte Repository eine Einheit, man kann nur alles oder nichts bekommen. Mit modularem Code kann dies im Vergleich zu Git-Submodulen ganz nett sein. (Während Git-Submodule natürlich auch ihren Platz haben.)

Und ein kleiner Vorteil: Subversion kann leere Verzeichnisse nachverfolgen. Git verfolgt den Dateiinhalt, sodass kein Verzeichnis ohne Datei angezeigt wird.

Johannes
quelle
11
Die Arbeit mit Sub-Bäumen ist meiner Meinung nach das einzige, was SVN über GIT hat. Punkt genommen, leere Verzeichnisse sind nett, aber auch nicht notwendig (und können umgangen werden). Wenn git-Submodule und git-Unterbaum weniger verwirrend wären, würde nichts viele Leute davon abhalten, zu GIT zu migrieren. Die anderen Vorteile, die einige Leute angesprochen haben, hängen von der (Entwickler-) Mentalität ab. Wenn Sie zum Beispiel von oben nach unten brauchen, ist das in Ordnung. Ich hätte aber keine Arbeit für dich.
Bis zum
3
Es ist lustig, wie dies die einzigen Dinge sind, die für SVN (und andere zentralisierte Versionskontrolle)
argumentiert werden können
1
Warum ist es lustig? - Neuere Systeme lernen von älteren Systemen. Es gibt sogar einen Vorteil von RCS gegenüber git: Die Verlaufsdateien können einfach von Hand bearbeitet werden und Sie können pro Datei verzweigen. Aber eolution beinhaltet, dass Funktionen verloren gehen ...
Johannes
3
Ich habe aus genau diesem Grund von einem Spieleunternehmen gehört, das SVN über GIT verwendet - wenn Sie von einem Repository mit einer Größe von vielen GB sprechen, wird es plötzlich wichtig!
James
18
Ab der Git-Version 1.8.0 können Sie jetzt den git subtreeBefehl verwenden, um genau dies zu erreichen. Letzter Subversion-Vorteil beißt den Staub :) Details hier: github.com/gitster/git/blob/… Hinweis: Obwohl dies ein Link zu einem github-Projekt ist, ist git-subtree jetzt Teil der Kern-Git-Distribution.
Carl
51

Ich kann an drei denken. Erstens ist es ein bisschen einfacher zu fassen, besonders für Nicht-Entwickler. Konzeptionell ist es viel einfacher als DCVS- Optionen. An zweiter Stelle steht die Reife, insbesondere TortoiseSVN unter Windows. TortoiseHg holt allerdings schnell auf. Drittens kann die Art der Bestie - nur ein Abbild eines Dateisystems, in dem Sie Dinge von jeder Ebene des Baums aus überprüfen können - in einigen Szenarien sehr nützlich sein - wie z von Servern ohne Dutzende von Repositorys.

Das soll nicht heißen, dass wir nicht die gesamte Entwicklung auf Mercurial verlagern.

Peter Mortensen
quelle
25
Leichter zu fassen ist ein wichtiger Vorteil, da dies die Wahrscheinlichkeit erhöht, dass es verwendet wird. SVN ist sicherlich viel besser als keine Versionskontrolle, und wenn jemand hartnäckig mit alten Methoden ist, ist SVN vielleicht die beste Wahl für ihn.
jhocking
12
@jhocking: Ich liebe SVN nicht, aber wenn mir jemand sagt "Ich mag diese neuen DVCS-Dinge nicht, also bleibe ich bei CVS", dann werde ich es definitiv empfehlen: Es ist der einfache Weg, zumindest teilweise gesund VCS ;-)
Joachim Sauer
4
@jhocking Neue Wege sind nicht immer für jeden Umstand das Beste. Es erinnert an die alte Geschichte, dass die NASA Millionen von Dollar für die Entwicklung eines Stiftes ausgegeben hat, der in 0 g schreiben kann. Die Kosmonauten hingegen werden mit Bleistiften fällig gemacht. Manchmal sind die alten Wege besser.
maple_shaft
25
@maple_shaft und manchmal auch nicht. snopes.com/business/genius/spacepen.asp
Peter Taylor
3
Das einfache Grokking ist sehr subjektiv und basiert hauptsächlich darauf, wie Sie versuchen, das neue Wissen in das zu integrieren, was Sie vielleicht bereits wissen. Es macht auch einen großen Unterschied, was Ihre Lernquelle ist. Wenn Sie durch Manpages gehen, viel Glück. Wenn Sie von einem guten Lehrer unterrichtet werden, der es bereits versteht, haben Sie es geschafft. Nachdem ich mir einige gute Videos auf YouTube angesehen hatte, fand ich, dass GIT einen enormen Sinn machte. Wenn Sie Ihr Verständnis von jemandem bekommen, der es bereits auf den Kern gebracht hat, ist alles leichter zu verstehen.
WarrenT
32
  • SVN-Repositorys sind aus Sicht eines Managers und Administrators einfacher zu verwalten ( ACL + Authentifizierungsmethoden + Hotcopy + Mirrors + Dumps)
  • SVN * -Hooks sind einfacher zu implementieren und zu unterstützen
  • svn:external hat mehr Leistung und Flexibilität als Submodule
  • Dateisystembasierte Repository-Bäume sind einfacher zu verwenden als monolithische Repositorys mit nur logischer Trennung
  • SVN hat mehr verschiedene Client-Tools
  • SVN hat nutzbare Web-Frontends von Drittanbietern, viel besser als Gits
  • SVN bricht nicht dein Gehirn
Lazy Badger
quelle
23
Bricht nicht dein Gehirn? Willst du mir beibringen, wie man einfach Zweige mit Konflikten in SVN zusammenführt?
WarrenT
4
"Bessere" Tools / Frontends, das ist ein bewegliches Ziel. Werkzeuge verbessern sich auf beiden Seiten. Keiner von uns weiß, welche Tools in einigen Jahren verfügbar sein werden. Diese Einschätzung vor 10 Monaten könnte sich im Laufe der Zeit leicht ändern und könnte jetzt abgestanden sein. Ich würde es vorziehen, substantielle Antworten zu sehen.
WarrenT
6
Baumkonflikte? Prüfen. Ja oder Nein zu allen Optionen? Nein. Svn soll wütend machen. Befehl zum Löschen der Arbeitskopie? Revert kann nicht versionierte Dateien nicht bereinigen.
Warren P
1
Wenn Sie alles löschen und erneut auschecken, werden nicht versionierte Dateien gelöscht.
jgmjgm
Ich liebe deine letzte Idee, Git hat mir das Hirn gebrochen: '(
Luke
24

Ich habe dies als Kommentar zu der Antwort eines anderen geschrieben, aber ich denke, es ist an und für sich eine Antwort wert.

Die von meinem Unternehmen sorgfältig ausgewählte Konfiguration für SVN erfordert das Sperren auf Dateiebene, um Inhalte zu bearbeiten, und verwendet niemals jemals die Zusammenführung. Infolgedessen kämpfen mehrere Entwickler um Sperren, und es kann ein schwerwiegender Engpass sein, und es besteht nie die Möglichkeit eines Zusammenführungskonflikts.

SVN hat definitiv eine bessere Top-Down-Management-Kontrolle als Git. Bei meiner Skunkworks-Migration nach Git (bitte um Verzeihung anstatt um Erlaubnis) habe ich meinen Manager oft mit der Vorstellung erschreckt, dass es keinen durch Software erzwungenen zentralen Master-Controlling-Server gibt, für den wir alle Sklaven sind.

Dan Ray
quelle
Zentralität ist eine Frage des Mythos, nicht der Tatsache. Niemand kann mich davon abhalten, irgendetwas zu ändern. Mit einem Lebenslauf können sie mich davon abhalten, etwas zentral zu verändern. Das Gleiche bei einem dvcs. Das Wort commit in cvcs steht für commit und push.
Warren P
@ Jonathan Henson: Das ist definitiv nicht der einzige Grund, warum Torvalds SVN hasst. SVN kann zentralisiert sein und ein besseres CVS sein, aber das macht es kaum zu einer guten Software. Torvalds hasst CVS / SVN nicht, weil sie zentralisiert sind, sondern weil er sie für erbärmlich schlechte Software hält. Ob er Recht hat oder nicht, liegt an Ihnen, aber ich sehe den immensen Erfolg von Linux (und Android) - das auf Milliarden von Geräten läuft - und Git - das die Welt im Sturm erobert -. Ich würde es mir zweimal überlegen, bevor ich mit ihm nicht einverstanden bin. Der Vortrag, den Torvalds vor Jahren bei Google auf Git gehalten hat, ist erstaunlich.
Cedric Martin
lol. Ihr Manager hat zu Recht Angst, dass es kein ordnungsgemäßes Backup-System gibt. Nur zu sagen, "aber es ist DVCS, damit jemand eine Kopie hat", fliegt nicht - ich weiß, als ich sah, dass Git an meinem letzten Platz benutzt wurde, hatten sie buchstäblich keine Kopien von einigen Repos. Allerdings kann das Sperren in manchen Situationen gut sein und Git schlägt in dieser Hinsicht fehl - es sei denn, Sie haben ein magisches Zusammenführungswerkzeug für Bilder oder andere Binärdateien. Git funktioniert nur wirklich für Textdateien.
Gbjbaanb
22

Meine Gründe:

  • Reife - sowohl der Server als auch die Tools (zB TortoiseSVN)
  • Einfachheit - weniger Schritte erforderlich, ein Commit ist ein Commit. DVCS wie Git und Mercurial beinhalten Commit und dann Push.
  • Binärverarbeitung - SVN verarbeitet ausführbare Binärdateien und Bilder besser als Git / Hg. Besonders nützlich bei .NET-Projekten, da ich gern Build-bezogene Tools in die Quellcodeverwaltung einchecke.
  • Nummerierung - SVN verfügt über ein lesbares Commit-Nummerierungsschema, bei dem nur Ziffern verwendet werden. Git und Hg machen das ganz anders.
Grant Palin
quelle
1
"Festschreibungsnummerierungsschema" ist nur möglich, wenn Sie über kanonische Amtsleitungen verfügen. Ansonsten welche bekommt die Hauptnummerierung?
1
+1 die numbring in svn. Diese Nummer ist eindeutig. Es gibt Tools, die diese Nummer als Teil der App-Versionsnummer xx.yy.zz.12882 verwenden, wobei 12882 die SVN-Versionsnummer ist. Wenn es ein Produktionsproblem gibt, können Sie nach der Versionsnummer fragen und Sie haben die genaue SVN-Revision, mit der die Software erstellt wurde
k3b
22

Ich schätze, dass Sie nach guten Informationen suchen, aber diese Art von Frage lädt nur ein: "Ich denke, Git ist so viel Gewinn, und svn the suxorz!" Antworten.

Ich habe versucht, Git ein wenig zu sehr für mein kleines Team zu finden. Es schien großartig für ein großes verteiltes Team oder eine Gruppe von Teams zu sein, die geografisch verteilt sind. Ich verstehe die Vorteile von Git sehr gut, aber die Quellcodeverwaltung ist meiner Meinung nach nichts, was mich nachts auf Trab hält.

Ich bin ein Hirschjäger, und wenn ich und meine Freunde ausgehen, sind sie bis an die Zähne bewaffnet und voller Munition und High-Tech-Ausrüstung. Ich tauche mit einem einzigen Gewehr, sieben Kugeln und einem Bockmesser auf. Wenn ich mehr als sieben Runden brauche, mache ich etwas falsch und ich mache es genauso wie jeder andere.

Der Punkt, den ich versuche, ist, dass Sie SVN verwenden, wenn Sie ein kleines Team sind, das an einem mittleren bis kleinen Projekt arbeitet und Sie bereits mit SVN vertraut sind. Es ist sicherlich besser als CVS oder SourceSafe und ich brauche nicht mehr als fünf Minuten, um ein Repository einzurichten. Git kann manchmal übertrieben sein.

maple_shaft
quelle
3
"Ja wirklich?" Dann schlage ich vor, Sie werfen einen Blick auf Fossil .
Spencer Rathbun
7
Lassen Sie uns nicht bei der geringsten Möglichkeit einer Kontroverse Alarm schlagen. Wichtige Themen sind oft die kontroversesten und diejenigen, die am ehesten zu einer starken Meinungsäußerung führen. "Diese Art von Frage" ist also wichtig und die Möglichkeit einer unzulässigen Antwort ist nicht plausibel, sie nicht zu posten. Ich gehe davon aus, dass die Benutzer dieser Website Erwachsene sind. Was mehr ist, wie mein Q formuliert wurde, war, wenn nicht neutral, dann respektvoll gegenüber Subversion-Leuten - reaktionsschnelle Antworten auf mein Q müssen die Vorteile von Subversion gegenüber Git vortäuschen, nicht umgekehrt.
Doug
@SpencerRathbun, danke! Das muss ich mir ansehen. Es ist nicht so sehr, dass ich Svn liebe, da ich eine Abneigung gegen Schwachkopf habe.
maple_shaft
10
@Spencer - Umgekehrt würde ich als Benutzer von beidem gitund jedem, der denkt, dass es zu viel ist hg, Quecksilber empfehlen git. TortoiseHG wäre sehr zu jedermann vertraut verwendet TortoiseSVN (es teilt auch die gleich Explorer Overlays auf Windows). Es ist sicherlich viel einfacher als VSS und ich wäre überrascht, wenn es mehr als ein paar Sekunden dauern würde, ein hg-Repo einzurichten, den Anfangszustand zu übernehmen und es auf ein freigegebenes Laufwerk zu klonen.
Mark Booth
@ MarkBooth Wie in der ursprünglichen Frage festgestellt, denke ich, es ist eine Frage der Wünsche und Bedürfnisse. An meinem derzeitigen Arbeitsplatz gab es kein Repo, bevor ich dort ankam. Ich brauchte etwas, das alle oder die meisten Projektwerkzeuge hatte, die ich zusammenpacken wollte, das einfach zu verwenden war, alles anstelle von Deltas aufbewahrte und das für Teams von 1 oder 2 Personen auf mehrere Maschinen verteilt funktionierte.
Spencer Rathbun
20

Dies ist alles relativ und wie maple_shaft sagte, wenn man für Sie arbeitet, ändern Sie sich nicht!

Aber wenn Sie wirklich etwas wollen , würde ich sagen, es ist vielleicht besser für Designer, Web-Programmierer und dergleichen - es verarbeitet Bilder und Binärdateien ein bisschen besser.

Turm
quelle
2
Wie geht SVN besser damit um? Git betrachtet jede Datei als BLOB.
WarrenT
4
@WarrenT Aufgrund der Workflows verzweigen und verschmelzen Sie mit git häufig (oder warum stören Sie sich daran?), Und Sie können Binärdateien einfach nicht realistisch verschmelzen. Daher setzen Sie in SVN häufig die Eigenschaft "needs lock" auf Binärdateien.
gbjbaanb
1
Einige Binärdateien können (theoretisch) zusammengeführt werden, z. B. ein ODT-Dokument.
Donal Fellows
18

Benutzerfreundlichkeit. Es ist nicht wirklich das Verdienst von Subversion, sondern das von TortoiseSVN . TortoiseGit existiert, aber es ist noch ein langer Weg, TortoiseSVN zu entsprechen.

Wenn Sie gefragt haben, was Git besser macht als SVN, würde ich GitHub antworten . Es ist lustig, wie Tools von Drittanbietern einen so großen Unterschied machen.

Peter Mortensen
quelle
1
Assembla (für alle unterstützten SCM - SVN in der Liste) ist besser als Github, denke ich
Lazy Badger
Es gibt jetzt auch Smartgit, GitXL usw., Programme, die die Verwendung von Git viel einfacher machen
wirrbel
@ LazyBadger, noch nie davon gehört.
Pacerier
16

Wenn Sie nicht verzweigen und zusammenführen müssen , ist SVN (mit TortoiseSVN unter Windows) sehr einfach zu verstehen und zu verwenden. Git ist für die einfachen Fälle zu komplex, da es versucht, das Verzweigen / Zusammenführen zu vereinfachen.

(Viele kleine Projekte müssen nie verzweigen, wenn sie gut verwaltet werden. Git zielt auf komplexe Fälle ab. Daher wird in den meisten Git-Dokumentationen davon ausgegangen, dass Sie komplexe Vorgänge wie Verzweigen und Zusammenführen ausführen müssen.)

Ian
quelle
8
Verwendung gitVerzweigen und Zusammenführen sind keine komplexen Operationen. Ich verwende sogar Zweige in einem Ein-Mann-Projekt, auch wenn es keine Anforderungen für mehrere Versionen gibt. Sie können Ihre Arbeit im Moment nicht in einer Zweigstelle fortsetzen und verzweigen, wenn Sie feststellen, dass es viel besser sein kann, eine andere Lösung auszuprobieren ... Ich stimme jedoch zu, dass dies gitetwas schwieriger zu erlernen ist.
Maaartinus
Jedes Mal, wenn Sie Fehlerbehebungen in alten Versionen vornehmen müssen, müssen Sie verzweigen und zusammenführen.
1
Warum denken die Leute nicht, dass mercurial einfacher ist als svn oder git?
Warren P
Ich denke, ein Teil davon ist, dass SVN bis vor kurzem das Verzweigen und Zusammenführen ohne sehr hohe Kosten nicht unterstützt hat und es Programmierern ermöglicht hat, mehr gegenüber Managern aufzustehen, wenn sie ständig ändern wollten, woran jemand arbeitet. Ein Tool muss innerhalb der Politik eines Unternehmens funktionieren und hilft auch dabei, die Politik eines Unternehmens zu gestalten.
Ian
14

Nun, mein Opa könnte SVN auf seinem Windows XP-Computer verwenden, aber er würde Probleme haben, Git zu verwenden. Vielleicht ist dies eher eine Leistung von TortoiseSVN als von TortoiseGit , aber ich denke, es hängt eher mit der Tatsache zusammen, dass Git von Natur aus leistungsfähiger und damit komplexer ist und es sinnlos wäre, es auf die gleiche Stufe herunterzuspielen.

Jetzt spielt es für meinen Opa keine Rolle mehr, denn er hat in letzter Zeit noch nichts programmiert. Ich war jedoch einmal in einem Team, in dem unsere Grafiker auch unsere Quellcodeverwaltung verwendeten.

Und das sind Leute, die einfach erwarten, dass ihre Werkzeuge funktionieren (ich auch, aber ich habe eine realistische Chance, sie im Falle eines Fehlers zum Arbeiten zu bringen) und intuitiv sind. Abgesehen von der Tatsache, dass es eine ziemliche Anstrengung gewesen wäre, sie dazu zu bringen, mit einem DVCS auszukommen , gab es wenig zu gewinnen. Und mit nur zwei Programmierern im Team war es für uns sinnvoll, auch nur bei SVN zu bleiben.

Peter Mortensen
quelle
Git ist der "philosophischere" Ansatz zur Versionskontrolle. Sie beginnen, sich Gedanken über die Semantik von Commits, Zweigen usw. zu machen. Leute, die ein VCS als "Backup" - und Verteilungswerkzeug verwenden möchten, haben es schwerer, aber Git ist nicht viel schwieriger
wirrbel 16.11.13
11

Bei der Arbeit konnte ich die Entwickler aus zwei Gründen nicht von SVN auf DVCS umstellen :

  • Teilweise Auschecken (wie nur drei Ordner aus unterschiedlichen Tiefen im Projektbaum)
  • Dateisperrung (Berichte im Binärformat)
alexandrul
quelle
8
  • Sicherheitsgefühl beim Ausführen eines 'svn commit'. Da Commits an den Server gehen, gibt es keine Möglichkeit, Fehler zu machen, durch die meine Änderungen gelöscht werden, nachdem sie festgeschrieben wurden. In git sind Commits lokal, also, bis ich drücke, ein streunendes 'rm -rf' und es ist alles vorbei.
  • Commits werden authentifiziert. Standardmäßig kann ich in git sagen, dass ich mich als jemand verpflichte.
  • Weniger Befehle zum Lernen für den täglichen Gebrauch. Mit 'svn checkout', 'svn up' und 'svn commit' kommen Sie ziemlich weit.
  • Geteilte Kassen funktionieren viel besser. Wenn Sie zum Festschreiben gehen, werden Sie nach Ihrem Benutzernamen / Kennwort gefragt. Sie müssen nicht daran denken, bestimmte Befehlszeilenargumente zu übergeben. Manchmal haben wir bei der Arbeit einen geteilten Rechner mit einem geteilten SVN-Checkout eines Projekts. Jemand könnte sagen "Bob, können Sie sich das auf diesem Computer ansehen" und er kann und er kann seine Änderungen als sein Benutzer festschreiben, ohne irgendwelche Fehler zu machen.
  • Repository-Layout. Sie können ein Umbrella-Projekt und Unterprojekte erstellen und auswählen, was wann überprüft werden soll.
  • Revisionsnummern sind inkrementelle Ganzzahlen.
  • Entwickelt für den zentralen Repository-Workflow.
Tim
quelle
+1 für das Authentifizierungsproblem. Git-Commits müssen signiert und die Signierungen müssen überprüft werden, was schwierig ist.
Christian
6

Andere Leute haben einige ziemlich gute Antworten gepostet, aber was ist mit Berechtigungen? Mit Subversion über SSH können Sie auf Ihrem Server ein separates Konto für SVN einrichten. Unterschiedlichen Entwicklern kann ein unterschiedlicher Zugriff auf verschiedene Teile des Repository gewährt werden. Kann GIT das tun? Ich denke, es gibt Gitolit, aber es scheint mir einfach nicht so flexibel oder robust zu sein, noch kenne ich jemanden, der es tatsächlich verwendet.

GlenPeterson
quelle
2
Andere haben dies durch die Erwähnung von "Top-Down-Management-Kontrolle" erreicht. Dies ist ein Schlüsselelement für meine Umgebung - wir haben bestimmte Bereiche unserer Repositorys, die für einige Benutzergruppen schreibgeschützt oder gar nicht lesbar sein müssen. Wir müssen auch einen einzigen Ort haben, auf den wir zeigen und sagen können: "Dies ist die maßgebliche Masterkopie. Wenn Ihre Kopie nicht mit der hier angegebenen übereinstimmt, ist sie nicht offiziell."
Alroc
1
Das gesegnete Repository des Projektleiters und der Leutnants gibt die Kontrolle darüber, wer verpflichtet werden kann. Git Repo, das auf einem http-auth-fähigen Server veröffentlicht wurde (mit denselben Apache-Modulen, die svn verwendet), führt eine Authentifizierung durch und sagt, wer was klonen / auschecken kann. Sicher, es ist nicht so detailliert wie die SVN-pro-Verzeichnis-Berechtigungen, aber für mich sieht es eher nach Mikromanagement als nach tatsächlichem Bedarf aus.
Hubert Kario
@ HubertKario - das wirft die Frage auf: "Sollten Ihre besten Programmierer ihre Zeit damit verbringen, den Code anderer Leute einzusehen?" Eigentlich interessiert mich die Antwort auf diese Frage so sehr, dass ich sie hier gepostet habe: programmers.stackexchange.com/questions/181817/…
GlenPeterson
5

Geschwindigkeit. Manchmal dauert das Klonen eines großen Git-Repositorys 10 oder 15 Minuten, während das Auschecken eines Subversion-Repositorys ähnlicher Größe einige Minuten dauert.

calum_b
quelle
6
Aber das Auschecken / Klonen ist eine seltene Operation. In den meisten Szenarien ist Git schneller als Subversion.
9.
5
git clone --depth=1ist dein Freund, wenn du dich nicht für Geschichte interessierst
Hubert Kario
4

Ich poste dies eher als Antwort als als Kommentar.

Ich gebe zu, dass DVCS derzeit ziemlich im Trend liegt, aber ich werde versuchen zu erklären, warum.

DVCS sind besser, weil genau wie viele Leute gesagt haben: "So hätten wir von Anfang an arbeiten sollen". Es ist wahr, Sie können mit einem DVCS das tun, was Sie mit SVN gewohnt sind, also auf eine Weise, die SVN überholt.

Allerdings ist nicht jedes Softwareprojekt so gut wie es nur geht:

  • Langzeitprojekte haben viel von DVCS profitiert, da es weniger Overhead verbraucht, eine viel bessere Verwaltung (Verzweigung usw.) ermöglicht und von Hosts wie Google Code und Github in hohem Maße unterstützt wird.

  • Diese Projekte sind nicht die einzigen, es gibt andere Arten von Projekten, die in Unternehmen ohne Hilfe von außen oder aus dem Internet entwickelt werden: Alles wird intern und oft kurzfristig erledigt. Ein gutes Beispiel: ein Videospiel. Code entwickelt sich schnell.

Im letzteren Fall benötigen Entwickler keine Verzweigungen oder hochentwickelten Funktionen, die DVCS bieten kann. Sie möchten lediglich Quellcode und Assets gemeinsam nutzen. Es ist unwahrscheinlich, dass der von ihnen erstellte Code erneut verwendet wird, da eine Frist festgelegt ist. Sie verlassen sich aus mehreren Gründen eher auf SVN als auf DVCS:

  • Entwickler haben Maschinen, die zum Unternehmen gehören, und dies kann sich schnell ändern. Das Konfigurieren eines Repos ist ein Zeitverlust.
  • Wenn diese Leute keine eigene Maschine haben, arbeiten sie mit geringerer Wahrscheinlichkeit am selben Quellcode / Teil des Projekts. Plus eins für die zentralen Daten.
  • Netzwerkgeschwindigkeiten und viel Geld ermöglichen die Verwendung eines zentralisierten Servers, der sich mit allen SVNs befasst. Es ist eine schlechte Praxis, aber es werden Sicherungen durchgeführt usw.
  • SVN ist nur einfacher zu bedienen, auch wenn es der falsche Weg ist: Dateien auf Peers ohne Redundanz zu synchronisieren , ist kein einfaches Problem, und „do es der richtige Weg“ kann einfach nicht in der Zeit, wenn Sie es immer perfekt sein wollen.

Denken Sie an die Maschine der Spielebranche und wie SVN Zeit spart. Die Leute kommunizieren viel mehr über diese Projekte, weil es in Spielen um sich wiederholendes Programmieren und adaptiven Code geht: Es gibt nichts Schwieriges zu programmieren, aber es muss so schnell wie möglich richtig gemacht werden. Programmierer werden angeheuert, sie codieren ihren Teil, kompilieren ihn, testen ihn ein wenig, legen fest, erledigt, Spieletester werden sich um den Rest kümmern.

DVCS sind für das Internet und für sehr komplexe Projekte gemacht. SVN sind für kleine, kurzfristige und enge Teamprojekte gedacht. Sie müssen nicht viel von SVN lernen, es ist fast ein FTP mit einem blöden Diff.

jokoon
quelle
Können Sie das Beispiel der Spielebranche erklären?
Johnny
3

Sowohl Subversion als auch Git fördern bestimmte (und sehr unterschiedliche) Ansätze für Entwicklung und Zusammenarbeit. Einige Organisationen werden mehr aus Git herausholen und andere werden mehr aus Subversion herausholen, abhängig von ihrer Organisation und Kultur.

Git und Mercurial eignen sich hervorragend für verteilte und locker organisierte Teams von hochkompetenten professionellen Programmierern. Beide gängigen DVCS-Tools fördern kleine Repositorys, wobei die Wiederverwendung zwischen Entwicklern über veröffentlichte Bibliotheken mit (relativ) stabilen Schnittstellen erfolgt.

Subversion hingegen fördert eine zentralere und eng gekoppelte Verwaltungsstruktur mit einer besseren Kommunikation zwischen den Entwicklern und einer stärkeren organisatorischen Kontrolle über die täglichen Entwicklungsaktivitäten. Innerhalb dieser kompakter organisierten Teams erfolgt die Wiederverwendung zwischen Entwicklern in der Regel über unveröffentlichte Bibliotheken mit (relativ) instabilen Schnittstellen. Mit TortoiseSVN kann Subversion auch multidisziplinäre Teams mit Mitgliedern unterstützen, die keine professionellen Programmierer sind (z. B. Systemingenieure, Algorithmeningenieure oder andere Fachspezialisten).

Wenn Ihr Team verteilt ist und die Mitglieder entweder von zu Hause aus oder von vielen verschiedenen internationalen Standorten aus arbeiten oder wenn sie es vorziehen, allein und still mit wenig persönlicher Kommunikation zu arbeiten, ist ein DVCS wie Git oder Mercurial eine gute Wahl kulturelle Passform.

Befindet sich Ihr Team hingegen an einem einzigen Standort mit einem aktiven "Team" -Entwicklungsansatz und viel persönlicher Kommunikation mit einem "Buzz" in der Luft, ist SVN möglicherweise ein Bessere kulturelle Passform, besonders wenn Sie viele interdisziplinäre Teams haben.

Natürlich ist es möglich, Git und Hg (mächtig und flexibel wie sie sind) so zu konfigurieren, dass sie so ziemlich alles tun, was Sie wollen, aber es ist definitiv mehr Arbeit und sie sind definitiv schwieriger zu verwenden, insbesondere für diejenigen Mitglieder des Teams, die wäre natürlich nicht geneigt, irgendeine Form der Versionskontrolle zu verwenden.

Schließlich stelle ich auch fest, dass die gemeinsame Nutzung von Funktionen mithilfe der "Hot" -Bibliotheksentwicklung unter Svn (mit CI und einem testgetriebenen Ansatz) ein koordiniertes Entwicklungstempo ermöglicht, das mit einem verteilten und lose gekoppelten Team nur schwer zu erreichen ist.

William Payne
quelle
1

Derzeit gibt es zwei wichtige Trends in der Versionskontrolle. Verteilung und Integration .

Git eignet sich hervorragend für die Dezentralisierung.

SVN verfügt über zahlreiche integrierte Tools. Es ist üblich, Ihren SVN-Server so einzurichten, dass Sie beim Einchecken eines Fixes die Fehlernummer im Eincheckkommentar angeben und diesen automatisch auf den Status "In Prüfung" setzen und den zugewiesenen Tester darüber informieren, dass dies erforderlich ist schau es dir an Dann können Sie eine Veröffentlichung markieren und eine Liste aller in dieser Veröffentlichung behobenen Fehler erhalten.

Die Tools, die dies mit SVN tun, sind ausgereift und werden täglich verwendet.

Sean McMillan
quelle
-1

In Subversion können Sie Protokollnachrichten (auch "Commit-Nachrichten" genannt) bearbeiten, nachdem das Commit ausgeführt und gesendet wurde. Für die meisten praktischen Anwendungen ist dies in dezentralen Systemen, einschließlich Git, konstruktionsbedingt nicht möglich. Natürlich können Sie in git "git commit --amend" ausführen, aber das hilft Ihnen nicht, nachdem Ihr Commit an eine andere Stelle verschoben wurde. Wenn Sie in SVN die Protokollnachricht bearbeiten, tun Sie dies auf dem zentralen Repository, das alle freigeben, sodass alle die Bearbeitung erhalten, ohne dass sich die ID der Revision ändert.

Das Bearbeiten von Protokollnachrichten nachträglich ist oft sehr nützlich. Abgesehen von der Behebung eines Fehlers oder einer Auslassung in einer Protokollnachricht können Sie beispielsweise eine Protokollnachricht aktualisieren, um auf ein zukünftiges Commit zu verweisen (z. B. eine Revision, die einen Fehler behebt oder die in der aktuellen Revision eingeführte Arbeit abschließt). .

Es besteht übrigens keine Gefahr, Informationen zu verlieren. Mit den Hooks vor und nach dem erneuten Ändern können Sie einen Verlauf der alten Nachrichten speichern, wenn Sie wirklich besorgt sind, oder E-Mails mit dem Protokollnachrichtendifferential versenden (dies ist tatsächlich üblicher), so dass es eine gibt Buchungskontrolle.

Karl Fogel
quelle
1
dies ist auch in git einfach zu tun; zB git --amend; Ein anderer Weg, dies zu tun, ist über git reset --soft HEAD ^, das nur zurückgeht, aber den Index nicht ändert, und Sie können die Commit-Nachricht bearbeiten / neu schreiben.
Doug
Hallo Doug. Ja, Sie können dies für Ihr lokales Repository tun, aber ich spreche davon, wenn Sie die Änderung an eine andere Stelle verschoben haben - "git commit --amend" hilft Ihnen dann nicht viel. In SVN können Sie die Protokollnachricht auf dem zentralen Server bearbeiten, gerade weil es ein Konzept für einen zentralen Server gibt. Das meinte ich mit "konstruktiv unmöglich in dezentralen Systemen". Ich werde meine Antwort bearbeiten, um dies klarer zu machen.
Karl Fogel
1
Ich liebe, wie "man mit der Geschichte herumspielen kann" angeblich ein Feature ist . Ich würde es als Fehler betrachten, wenn es nicht beabsichtigt wäre.
cHao,