Nachruf für Subversion – es ruhe in Frieden.
Subversion (svn) wurde als Nachfolger
für CVS
lanciert. Das ist jedoch nur zum Teil gelungen. Die negativen Punkte
wurden übernommen und noch weitere Probleme hinzugefügt, die die
Verwendung problematisch machen. Demgegenüber stehen nur einige wenige
Verbesserungen, die dann teilweise auch noch völlig unbrauchbar
implementiert wurden.
Hier werde ich weitere Probleme mit Subversion gesammelt. Die Listen
unten sind also noch längst nicht vollständig.
Übernommene Nachteile von CVS
- Mehrfaches Mergen von Entwicklungszweigen ist nicht ohne Weiteres
möglich. Der Anwender muß von sich selbst Notieren, welcher Teil des
Zweigs schon gemerged ist.
- CVS implementierte Dateiversionen. Ein Update innerhalb eines
Verzeichnisses bezog sich somit einzig auf diesen Zweig. Dieses
Verhalten war dokumentiert, nachvollziehbar und in dem Kontext
sinnvoll. SVN implementiert nun repositoryweite Versionen. Leider hat
man aber ziemlich wahrscheinlich innerhalb größerer Repositorys immer
noch unterschiedliche Versionen, da das Updateverhalten von CVS
übernommen wurde, nun aber weder Sinn macht, noch logisch
nachvollziehbar ist. Fatal ist das Ganze, wenn nun solch veralteten
Versionen im Repository herumgeschoben werden.
Neu hinzugefügte Nachteile
- CVS hatte noch ein brauchbares Backend. Mit SVN bestand zwar die
Notwendigkeit, dies zu ändern um vereinzelte Features zu
implementieren, jedoch wurde hier geschlampt, so das man unmöglich
seine Daten Subversion anvertrauen kann, ohne eine verläßlichere
Versionsverwaltung bzw. ein entsprechendes Backup in der Hinterhand zu
haben.
- Mit fsfs ist zwar ein Backend entwickelt worden, welches wesentlich
stabiler ist als sein Vorgänger, grundsätzlich bestehen
weitere Probleme jedoch immer noch. So kann es durch Probleme im
Encoding der Log-Notizen sehr leicht vorkommen, daß das gesamte
Repository nicht mehr verwendbar ist.
- Es ist nicht möglich, einen einmalig (aus versehen) im Repository
gelandete Datei oder Version zu löschen. Wobei, es ist möglich,
erfordert jedoch eine
Operation am offenen Herzen
, indem man das
Repository dumpt, mit Filtern bearbeitet und wieder importiert. Dabei
ist es jedoch leicht möglich, daß man sich sein gesamtes Repository
zerstört oder zumindest alle bereits ausgecheckten Versionen
unbrauchbar werden.
- Erzeugen von Zweigen und Versionen ist in Subversion durch
einfaches Kopieren in separate Verzeichnisse möglich. Dies ist für eine
Entwicklung völlig unbrauchbar.
- Man kann aus versehen eine Version (Tag) editieren. Dies sollte
eine brauchbare Versionskontrolle verhindern. Eine einmal getaggte
Version sollte nicht mehr editierbar sein.
- Da auch die Struktur nicht fest vorgegeben ist, sind häufig
solche Stielblüten wie
project/trunk/subproject/{trunk,branches,tags}
oder
project/branches/subproject/{trunk,branches,tag}
zu
finden. Damit ist der Sinn einer sauberen Versionsverwaltung ad
absurdum geführt.
- Eine brauchbare Art, wie man mit einer Versionskontrolle arbeiten
kann, ist, eine Idee erstmal in einem eigenen Repository zu entwickeln
und, sofern sie sich als brauchbar erweist, die Datei(en) einfach an
die entsprechende Stelle im Projektrepository zu verschieben. Während
diese Arbeitsweise mit CVS noch sehr einfach war, man kopierte einfach
die
,v
-Dateien, ist sie mit Subversion komplett unmöglich
bzw. nur mit einer Operation am offenen Herzen
möglich, indem
man am Repositorydump rumschraubt und es wieder importiert. Dies
impliziert die selben Probleme, wie sie oben schon erwähnt sind.
Vorzüge zu CVS
- Mit Subversion ist es möglich,
mv
und cp
zu dokumentieren und dabei die Versionshistorie zu erhalten. Bei CVS
ist dies nur mit Tricks möglich und nur, indem im Repository gearbeitet
wird.
- Subversion erlaubt eine Versionierung von Verzeichnissen. Dies ist
zwar nur selten notwendig, kann jedoch von Nutzen sein.
Referenzen
Nun währen meine Schlußfolgerungen ja rein subjektiv, wenn nicht auch
andere ähnliche Problem hätten. Nun, hier sind ein paar Links zu anderen
Seiten, die sich mit der selben Problematik beschäftigen:
©Klaus Ethgen