webentwicklung-frage-antwort-db.com.de

Subversion vs CVS

Ich habe sowohl SVN als auch CVS ein wenig verwendet, muss aber für ein neues Projekt, das ich starten werde, eines auswählen.

Kann jemand, der beide ausgiebig verwendet hat, einige Vor- und Nachteile anbieten und der Meinung ist, dass er besser ist? Die besten Lernressourcen würden auch geschätzt.

Dies ist für ein kleines Projekt, nur ein oder zwei Entwickler müssen gestartet werden.

51
Eli

Ich habe beide benutzt. Es gibt keinen Vergleich; du willst svn. Der einzige Grund für die Verwendung von CVS ist, dass Sie ein Altsystem mit Management betreten oder übernehmen, das den Status Quo nicht ändern möchte. Wenn Sie mit einem neuen Projekt beginnen, ist es praktisch eine logische Unmöglichkeit zu argumentieren, dass CVS besser ist als Subversion.

Wenn Sie googeln, sollten Sie viele Vergleiche und Gründe für die Verwendung von Subversion über CVS finden. Einige Vorteile von Subversion gegenüber CVS:

  • kann Dateien oder Verzeichnisse sauber verschieben oder umbenennen
  • atomare Commits
  • "billiges" Kopieren und Verzweigen
  • commits sind Changesets für den gesamten Baum (nicht nur Historien zu einzelnen Dateien)

Trotzdem empfehle ich Ihnen, einige der verteilten VCSs wie Bazaar, Mercurial und Git zu erkunden. Ich persönlich benutze git für alle meine Projekte.

68
Pistos

Subversion hat einige bedeutende Gewinne gegenüber CVS:

  1. gute Remote-Optionen http/https/svn vs. pserver
  2. atomare Commits
  3. allgegenwärtige Werkzeugunterstützung
  4. umbenennen
  5. verzeichnisversionierung

Es hat jedoch gravierende Mängel. Das größte ist, dass Branches und Tags in svn keine erstklassigen Bürger sind, sondern lediglich Verzeichnisse, die sich an eine Konvention halten. Neben dem Verlust einiger der Vorteile von echtem Verzweigen und Markieren (in anderen Kommentaren erwähnt), besteht das größte Problem darin, dass es sehr einfach ist, Fehler zu machen. 

Die Verwendung von Konventionen anstelle der Konfiguration durch Subversion bedeutet, dass Sie sich im Voraus über Ihre Repository-Struktur Gedanken machen müssen und sicherstellen müssen, dass sich alle daran halten. Ansonsten erstellen Sie eine Welt der Verletzungen für zukünftige Generationen, ganz zu schweigen von Werkzeugen, die Ihr Repo benötigen.

Zusammenführen und Spiegeln gab es vor 1.5 kaum (gute Hilfe für). 1.5 hat Schritte unternommen, um beide anzusprechen, aber es gibt noch Verbesserungsbedarf. Das Zusammenführen in Subversion ist immer noch schwieriger als es sein muss.

SVN über CVS ist fast ein Kinderspiel. Es wäre jedoch nachlässig, zumindest nicht zu überlegen, was DVCS zu bieten hat (Git, Hg, Bzr), oder wenn Ihr Budget es zulässt, gibt es kommerzielle Tools mit hervorragendem Ruf (Accurev, Perforce). 

Subversion ist wahrscheinlich die richtige Wahl, aber Sie müssen Ihre Hausaufgaben machen, um die besten Ergebnisse zu erzielen. Beginnen Sie mit dem Red Book http://svnbook.red-bean.com/

22
pte

Obwohl ich in den meisten Fällen Subversion gegenüber CVS wählen würde, sollten Sie wissen, was Sie mit Subversion vermissen:

  • CVS betrachtet Tags und Verzweigungen als verschiedene Dinge. Subversion nicht. Dies bedeutet, dass auf Subversion aufgebaute Tools von Drittanbietern (z. B. IDEs mit Integration der Quellcodeverwaltung) schwieriger sind, den Unterschied zu kennen. Normalerweise müssen Sie einige spezielle Konfigurationen vornehmen, um die Position Ihrer Tags und Verzweigungen zu bestimmen, und Sie müssen sicherstellen, dass Ihre Benutzer an einem bestimmten Dateisystem-Layout festhalten.

  • Subversion kann keine Datei anzeigen und Ihnen sagen, an welchem ​​Punkt jemand einen Zweig oder ein Tag erstellt hat. Werkzeuge wie CVSGraph können diese Informationen verwenden, um einen Baum des Dateiverlaufs zu zeichnen. Um dies mit Subversion zu tun, müssten Sie alle Verzeichnisse für Verzweigungen/Tags durchsuchen, und ich habe keine Tools gesehen, die dies gut tun.

  • CVS gibt es schon länger, und die Tools von Drittanbietern sind meiner Erfahrung nach stabiler.

14
JW.

Nennen Sie mich altmodisch, aber ich habe das Verzweigungs-/Tagging-Modell unter CVS vorgezogen.

In CVS unterscheiden sich Verzweigungen und Tags Dinge . Ein Tag ist ein Label für eine Revision. Sie sind sehr nützlich, wenn Sie beispielsweise einPRODUCTION- Tag für Dateien markieren, die mit Ihrem Webserver synchronisiert werden sollen. Sie müssen nicht zusammenführen, um diePRODUCTION-Dateien zu aktualisieren - Sie müssen nur das Tag verschieben.

Verzweigungen leben in demselben Namensraum wie die Hauptdatei - es ist leicht, alle Mods einer bestimmten Datei aufzuspüren. 

In SVN gibt es keine Tags wie ein Tag. Es gibt nur Äste. Wenn Sie Tags wünschen, müssen Sie einen Zweig erstellen und so tun, als wäre er ein Tag. Zweige sind im Wesentlichen Kopien von Dateien. Das letzte Mal, als ich SVN für Verzweigungen/Zusammenführungen verwendet habe, mussten Sie die Revision der vorverzweigten Datei aufzeichnen, wenn Sie jemals gehofft hatten, sie wieder zusammenzuführen. 

Ich denke jedoch, dass SVN in jeder anderen Hinsicht besser ist, und Sie sollten wahrscheinlich kein neues Projekt mit CVS starten.

8
Gary Richardson

Sie werden eine Menge Antworten darauf bekommen, vermute ich. Sie könnten sogar alle zustimmen.

Ich glaube, zwischen diesen beiden Möglichkeiten sollte Subversion nicht in Frage kommen. Subversion wurde als "besseres CVS" gebaut, und deshalb unterhält niemand mehr aktiv CVS. Subversion kann Dateien umbenennen und verschieben, ohne den Verlauf zu verlieren, unterstützt atomare Commits, verfügt über ein robusteres Repository-Format, modernere Zugriffsmethoden, eine bessere Unterstützung von Drittanbieter-Tools und die Liste wird fortgesetzt.

2
Greg Hewgill

Subversion ist wie eine bessere CVS. Bewegt sich beim Verschieben von Dateien und Verzeichnissen gut. Es verfügt über eine Verzweigungsunterstützung, die jedoch den verteilten VCSs unterlegen ist.

Sie können auch die Verwendung eines verteilten VCS wie Git, Bazaar oder Mercurial in Betracht ziehen.

Edit: Hier ist ein Link zu einer ähnlichen Frage

1
hayalci

Generell Subversion .. Allerdings sollten Sie auf Ressourcenprobleme achten.

Als ich für eine Spielefirma arbeitete, hatten wir ein paar Verzeichnisse mit Hunderten winziger Dateien und andere Verzeichnisse, die einige hundert Megabyte Dateien enthielten. Beim Wechsel von CVS zu Subversion verringerte sich die Geschwindigkeit beim Auschecken des Repos von einer Stunde auf vier oder fünf Stunden. Die Aktualisierung verlief ebenfalls wesentlich langsamer.

Dies ist fast sicher auf die Verwendung von http oder ssh zur Übertragung von Dateidaten zurückzuführen, im Vergleich zum nativen csv-pserver. Da es jedoch so einfach ist, svn über ssh oder webdav einzurichten, neigen die Leute dazu, nicht über den Protokollaufwand nachzudenken. Sie können jedoch ein natives svn-Protokoll verwenden, und dies sollte das Problem lindern. Wir haben dies in meiner alten Firma nicht getestet.

Ein anderes Problem, das häufig ignoriert wird, ist der Speicherplatz. Wir haben festgestellt, dass Subversion lokal mehrmals so viel Speicher wie CVS verwendet hat. Ich erinnere mich an das Speichern einer lokalen Kopie der Repo-Daten, um das Diffing zu beschleunigen. Dies wird kein großes Problem sein, es sei denn, Sie speichern mehrere Gigabyte in Ihrem Repository.

1
ErgoSum

Ich habe Subversion seit 3,5 Jahren verwendet, jetzt wechselte ich zu einem anderen Unternehmen, das CVS für die Quellcodeverwaltung verwendet. Zunächst gibt es nicht viele Unterschiede zwischen den beiden, aber zum Zusammenführen des Betriebs (was die meisten meiner Bedenken ist) könnte ich sagen, dass CVS bessere Arbeit geleistet hat. Die Konzepte von Zweigen/Tags in SVN sind verwirrend, in CVS jedoch sehr klar. Auch das Zusammenführen (in meinem Fall die Integration eines Zweigs) ist in CVS viel einfacher als in SVN . Die Schwäche von CVS liegt meiner Meinung nach bisher nur beim atomaren Commit. Ansonsten wäre es eine gute Wahl. 

0
Vinh