Warnung: Seit diesem Beitrag habe ich Mercurial gefunden und liebe es viel besser als SVN. Daher ist dieser Beitrag mit den Pro SVN-Kommentaren und dem allgemeinen Anti-DVCS etwas veraltet, aber das Anti-Git-Zeug ist immer noch relevant
Ich bin ein Fan von SVN über Git.
Warum? Weil SVN für einen einzelnen Entwickler oder ein kleines Team viel einfacher war und git (speziell msysgit) einen schlechten Geschmack in meinem Mund hinterließ.
Als ich in einem kleinen Laden ein Praktikum machte, wurde ich mit Windows vertraut gemacht. Ich bemerkte sofort, wie viel Arbeit nötig war, um es mit Github zum Laufen zu bringen. Zuerst musste ich einen privaten ssh-Schlüssel generieren, den öffentlichen Schlüssel in Github einfügen, dann den Festzug aufrufen und meinen privaten Schlüssel jedes Mal öffnen, wenn ich einen Push ausführen wollte, was äußerst ärgerlich war.
Und es hat mir nie wirklich gefallen, dass ich das gesamte Repository abgerissen habe. Ich gebe zu, dass ich nie mit großen Dateien gearbeitet habe, aber ich hätte Angst, das KDE-Repository in Git herunterzuladen, wenn sich das gesamte Repo und seine Revisionen auf meiner Festplatte befinden.
Dann gab es den verwirrenden Prozess, einen Commit zu machen. TMK, ich musste zuerst alle Dateien "inszenieren", die ich festschreiben wollte (was schadete, wenn Sie viele, viele Dateien hatten, ich brauchte eine Weile, um den manuellen Befehl zu finden, mit dem ich alles inszenieren konnte), dann das Festschreiben ausführen und dann zum Hauptmenü schieben Repo (warum ist das eine separate Operation ?!).
Sie hatten auch die nicht (!) Sehr hilfreichen Festschreibedaten. Oh schau, das ist ein Commit 14f74433245ae17aeeaa Teil des Baumes 2167a4934d0a4a7db0de und der Eltern d7042abb4821d3faf600. Zum Teufel heißt das? Ich sollte in der Lage sein, die Dinge ziemlich schnell herauszufinden und keine seltsame Dokumentation zu konsultieren.
Apropos Dokumentation, zumindest als ich sie verwendete, schien alles im Linux-Man-Dateiformat zu sein, dh verwirrend und für mich nutzlos. Ich konnte selten viel Hilfe in den Dokumenten finden und griff einfach auf Google zurück.
Und bei Commits hat mir das Fehlen von Versionsnummern nicht gefallen. Jetzt weiß ich, dass dies am Design von Git liegt, aber jede Software benötigt eine Versionsnummer. Ich erinnere mich noch an die Markierungs-Commits, bei denen "Geänderte Version auf 1.8.6" oder ähnliches angezeigt wurde, aber Sie konnten trotzdem keine Build-Nummern erstellen. Für mich ist die Version 1.8.6.5164 (letzter Teil ist die Revisionsnummer) viel mehr als nur 1.8.6 und eine Notiz, die besagt, dass sich etwas geringfügiges geändert hat, probieren Sie es aus
Das Software-spezifische Basisprogramm unter Windows ist msysgit, eine schreckliche Schnittstelle. Es hat mich ein paar Mal gepackt, hatte eine schreckliche Oberfläche und die CLI-GUI-Integration war bestenfalls fraglich. Die Kommandozeilen-Junkies um mich herum hassten die GUI noch mehr.
Nun schauen wir uns SVN an. Und da ich auf Windows bin und ein Google-Konto habe, speziell TortoiseSVN und Google Code.
Erstens, vollständige Shell-Integration, um alles im Repository zu erledigen (und für Linux-Benutzer macht RabbitVCS dasselbe), es ist keine Haupt-GUI erforderlich. Das Abrufen eines Repositorys ist ein Kinderspiel, es wird kein SSH benötigt (ich kann mich nicht erinnern, ob Github SSH für Pulls benötigt) und es wird kein gesamtes Repository + alle bisherigen Commits auf Ihrer Festplatte gespeichert.
Das Festschreiben ist äußerst einfach, vor allem, weil kein SSH oder Staging erforderlich ist. Sie überprüfen einfach alle gewünschten Dateien mit der sehr hilfreichen Option Alle auswählen, die in meiner msysgit-Version nicht verfügbar war, geben Sie eine Commit-Nachricht ein und klicken Sie auf Commit. Google Code fragt Sie dann nach Ihren Anmeldeinformationen (die von den meisten Kunden gespeichert werden) und danach, ob Sie fertig sind. Einfach, leicht und ohne SSH
Versionsnummern? Mit etwas einfachem Code können Sie allen Kassen eine Versionsnummer und eine Commit-Nummer hinzufügen, was die Sache so viel einfacher macht. Sie erhalten auch verwendbare Versionsnummern, die tatsächlich eine Änderung anzeigen, z. B. 1.8.6.5165 ist neuer als 1.8.6.5164.
Dokumentation? Nun, es ist schwer zu sagen. Schildkröte ist dokumentiert, aber ich habe seit so langer Zeit nicht mehr auf die offizielle Dokumentation verwiesen, dass ich sie nicht beurteilen kann. Es hat mir gereicht, eine einfache Einführung zu lesen.
Das Zusammenführen ist etwas anderes, das ich nicht vergleichen kann. Ich musste es einmal in Git machen, als jemand anderes eine Änderung an einer Datei festlegte, an der ich arbeitete, aber niemals in SVN.
Welches würde ich empfehlen? In großen Teams hat git seine Vorteile, hauptsächlich im nichtlinearen Entwicklungszyklus. In einem anderen Projekt habe ich 4 Programmierer in getrennten Zweigen starten sehen, die dann auf sehr seltsame Weise den gesamten Code zusammengeführt haben, der sich irgendwie in den endgültigen Masterzweig verwandelt hat. Github und msysgit hatten ein wirklich schönes Visualisierungstool für das gesamte Projekt, das mir sehr gut gefallen hat.
Für einzelne Entwickler oder kleine Teamprojekte ist SVN das Beste, da die meisten Gits-Funktionen nicht verwendet werden und Sie nur die negativen Teile erhalten. Einfachheit ist so eine schöne Sache