[linux-l] Versionskontrollen (war: Warum gibt es keine einheitliche Dokumentation?)
Peter Ross
Peter.Ross at alumni.tu-berlin.de
So Jan 21 22:16:10 CET 2007
On Sun, 21 Jan 2007, Volker Grabsch wrote:
> Wie du auf diese andere Begriffs-Definition kommst, weiß ich nicht.
> Auf welcher Webseite / in welchem Buch hast du das aufgeschnappt?
Aus meiner Erfahrung. Es gibt einen Unterschied zwischen RCS und CVS, die
lediglich Aenderungen auf Dateiebene bearbeiten, und Subversion und den
anderen, die dateiuebergreifende Aenderungen beruecksichtigen.
> Es geht darum, dass nicht die Versionen im Zentrum stehen, sondern
> die Änderungen *zwischen* den Versionen, auch Chagesets genannt. Darum
> geht es. Changesets/Patches stehen im Mittelpunkt, nicht die Versionen.
Es kann nirgendwo irgendetwas im Zentrum stehen - die Versionen sind die
Zustaende und die Aenderungen die Beziehungen zwischen ihnen.
Beide sind notwendig, und muessen daher von einer Versionskontrolle
behandelt werden (lass Dir, nebenbei, mit Deiner Definition im Kopf noch
einmal den Begriff "changesetbasierte Versionskontrolle" durch den Kopf
gehen.. zentral ist die Kontrolle, Version ein Zusatz und changesetbasiert
ein Attribut..)
> Der Einfachheit halber lass uns bitte bei dieser gängigen Definition
> bleiben. Natürlich könnten wir auch vereinbaren, im folgenden Bäume als
> Häuser zu bezeichnen, oder "ich" und "du" zu vertauschen.
Etwas in den Mittelpunkt stellen, ist eine Betrachtensweise, und aendert
nichts an dem zu betrachtenden Objekt.
Zwischen Haeusern und Baeumen gibt es definitiv ein paar Unterschiede. In
Rostock steht ein Hausbaumhaus, wenn Du Dich fuer alte Haeuser und
Architektur interessierst, aber das ist eine andere Sache;-)
> Ich stimme dir zu. Mit "Changeset" meinte ich genau das.
Und genau mit denen arbeite ich mit Subversion derzeit, weder stets online
noch mache ich staendig ein update vor einem commit.
Beispiel ist ein Firewallskript, welches auf einem Dutzend Firewalls an
verschiedenen Orten eingesetzt wird.
Es besteht aus einem Satz "zentraler Skripts" mit Subroutinen, sowie einem
Satz Dateien, die spezifisch fuer den Rechner/Ort sind, und die, abhaengig
vom Hostnamen, in die zentralen Skripts eingefuegt werden.
Mein Changeset sind die Aenderungen, die ich lokal mache, und die dann
irgendwann comittet werden (wenn alles in Ordnung ist, manchmal auch einen
Tag spaeter, weil ich nachts um drei keinerlei Lust habe, nach der
Feuerwehr auch noch den Aufraeumtrupp zu spielen).
Gelegentlich mache ich auch Aenderung an verschiedenen Orten, und spaeter
werden sie wieder eingecheckt. Wenn es dabei zu Konflikten kommt, da ich
ein zentrales Skript an zwei Orten geaendert habe, sagt mir das
Subversion. Dann muss ich die halt haendisch einpflegen (wobei ich
sicherlich nicht allzu geschickt bin, ich benutze diff zu
.svn/textbase, svn update und nochmal diff; mit sed, patch etc. koennte
ich da bestimmt noch effizienter werden.)
Wenn ich in zentralen Skripten aber eine Aenderung vornehme, die sich auf
ein bestimmtes ortspezifisches Skript (rc.services.${location}) auswirkt,
muss ich, damit das Chanbgeset "sauber" arbeitet, diese als Teil eines
Changesets definieren. Prima, ich muss mir die Gedanken VOR der Aenderung
machen.
Bei Subversion und meiner Vorgehensweise muss ich das auch, indem ich
branche.
Ein Vorteil von Deinem Changeset ist, dass ich den "Branch" auf ein Set
von Dateien anwende. DAS ist mit Subversion so nicht moeglich.
Wenn ich also nicht gebrancht habe, wird mein naechstes svn update des
Baumes mich mit einem alten, nicht angepassten rc.services.${location} auf
die Nase fallen lassen.
Was aber, wenn ich mit Changesets arbeite und ein neues Skript hinzufuege
- eine neue Location? (ein neues rc.services.${location}
Ich arbeite da mit einer alten Kopie, und Dein Changeset kennt dieses neue
Skript noch gar nicht. Du checkst Dein Changeset ein, ich mein neues
Skript, und schon falle ich auf die Nase.
Bei Subversion waere das ganze Repository gebrancht worden, und ich haette
mit dem alten zentralen Skript gearbeitet, dabei waere ich _nicht_ auf die
Nase gefallen.
Neben Vor- und Nachteilen,
vielleicht faellt Dir jetzt ein echter Unterschied zwischen Subversion und
Deinen Changesets auf?
Ich kann praktisch Teile des Repositories branchen, nicht nur das gesamte.
Das ist ein echter Unterschied, der eine neue Definition verdient, aber
nicht, ob etwas im Mittelpunkt steht oder nicht.
Danke fuer Deine Ausfuehrungen, die haben mir, wenn auch auf Umwegen,
weitergeholfen:-)
Es gruesst
Peter
Mehr Informationen über die Mailingliste linux-l