Einer der Gründe, warum Programmierer SVN gegenüber CVS bevorzugen, ist, dass erstere atomare Commits zulassen? Was bedeutet das ?
Einer der Gründe, warum Programmierer SVN gegenüber CVS bevorzugen, ist, dass erstere atomare Commits zulassen? Was bedeutet das ?
Antworten:
Dies bedeutet, dass beim Festschreiben an das Versionskontrollsystem entweder alles eingegeben wird, was festgeschrieben werden soll, ODER nichts ausgeführt wird.
Wenn Sie in CVS versuchen, einen Commit durchzuführen, kann der Commit für mehrere Dateien erfolgreich sein und bei mehreren anderen fehlschlagen (weil sie geändert wurden). Dadurch befindet sich das Repository in einem unglücklichen Zustand, da die Hälfte Ihres Commits nicht vorhanden ist und Sie wahrscheinlich Dinge in einem Zustand belassen haben, in dem sie nicht kompiliert werden können oder noch schlimmer. Jetzt müssen Sie sich beeilen und alle Änderungen integrieren, damit Sie die anderen Dateien festschreiben können, bevor eine andere Person ein Update durchführen muss und die fehlerhaften Änderungen erhält.
In SVN geschieht dies nicht - SVN schreibt entweder alles fest, was Sie geändert haben, oder es schlägt den gesamten Änderungssatz fehl. Auf diese Weise bleibt das Repository aufgrund von Commit-Problemen niemals in einem defekten Zustand.
Dies wird zB in Bye-bye CVS erklärt. Ich habe Artikel von Andy Lester umgewandelt worden :
Wenn ich versuche, ein Commit in Subversion durchzuführen, aber eine der Dateien einen Konflikt aufweist oder veraltet ist, wird keine der Dateien festgeschrieben. In CVS haben Sie einen halb-festgeschriebenen Satz von Dateien, die Sie JETZT reparieren müssen.
Die Tatsache, dass CVS den Programmierer zwingt, die Zusammenführung sofort zu korrigieren, ist so kontraproduktiv wie es nur geht. Im Vergleich dazu ist eine Option zum Verzögern / Abbrechen / sorgfältigen Zusammenführen von Änderungen ein wesentlicher Vorteil.
Weitere Vorteile von SVN gegenüber CVS, die im obigen Artikel erläutert wurden, sind:
Lokale Versionen von allem, was Sie tun
Wenn Sie CVS Diff verwenden möchten, müssen Sie in der Lage sein, eine Verbindung zu Ihrem Repository herzustellen. Keine Netzverbindung, kein Unterschied. Subversion speichert lokale unberührte Kopien von dem, woran Sie arbeiten, so dass svn diff einwandfrei funktioniert. Willst du von vorne anfangen? svn revert funktioniert auch ohne verbindung.Symbolische Namen von Revisionen
HEAD ist der Name der Stammspitze in CVS, aber ich wollte schon immer in der Lage sein, "-r-1" zu sagen, wie ich es damals in PVCS-Tagen tun konnte. Mit CVS muss ich ein CVS-Protokoll über das, was ich gerade bearbeite, erstellen und dann eines subtrahieren. Das macht keinen Spaß. Mit Subversion kann ich svn diff -r PREV sagen.Echte Statusberichte
In CVS können Sie nur dann feststellen, ob etwas auf dem Server neuer ist, wenn Sie cvs update ausführen und hoffen, dass das, was ausfällt, keine Konflikte verursacht. Mit dem Befehl svn status erhalte ich einen echten Status, damit ich feststellen kann, ob Konflikte vorliegen, BEVOR ich ein Update vornehme.Hilfreicher Umgang mit Zusammenführungskonflikten
In CVS erhalten Sie bei Konflikten Konfliktmarkierungen in Ihrer Datei. In Subversion erhalten Sie Konfliktmarkierungen, PLUS eine Kopie Ihrer ursprünglichen Vor-Konflikt-Datei, PLUS die vom Server heruntergeladene Version und PLUS die Version, die Sie ursprünglich bearbeitet haben. Anschließend müssen Sie svn filename.txt explizit auflösen, um Subversion mitzuteilen, dass Sie das Problem behoben haben. Kein versehentliches Zurückschreiben in CVS mit noch vorhandenen Konfliktmarkierungen mehr.
Dies bedeutet, dass alle Änderungen an allen Dateien in einer einzigen Transaktion festgeschrieben werden, sodass entweder alle erfolgreich sind oder keine.
Dies bedeutet, dass es weniger wahrscheinlich ist, dass Teilbearbeitungen im Repository eingecheckt werden, die dazu führen, dass Builds fehlschlagen. Man kann immer noch vergessen, alle relevanten Dateien einzuchecken, aber das ist eher ein Prozessproblem als ein Problem mit dem Versionssystem.