[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