Hallo,
Das heißt, er hält stabile Versionen, Testversionen und wilde Experimente in
Ganz genau, man kann in SVN/Git/Mercurial verschiedene Versionen eines codes gleichzeitig haben und teile dazwischen hin und her verschieben ohne angst haben zu müssen was kaputt zu machen denn jeder Schritt ist durch ein "Undo" rückgängig machbar.
verschiedenen Verzeichnissen vor
Oh nein, das hat zu viele Nachteile, der größte, es gibt keine "Undo" Möglichkeit fals man merkt dass der code den man in der Nacht zuvor geschrieben hat mehr kaputt macht als dass er weiterhilft kann man einfach ein paar mal "Undo" machen und ist zurück beim letzten Stand wo es noch gut funktioniert hat.
und stellt seinen Kollegen jeweils das zur Verfügung
Ja dazu gibt es diese Zentralen Server von denen man sich dann den jeweiligen code und die jeweiligen Versionen holen kann. Sehr vorteilhaft falls mal einer der Kolegen krank wird und jemand anderes was dringendes fixen muss. Man sieht bei jeder Zeile code auch wer sie verbrochen hat und wann und kann gegebenenfalls mal nachfragen was sich dieser dabei gedacht hat.
was er im Moment für "final" oder "ausgereift" hält (und behält die Testversionen unter Verschluss).
Jo viele haben einen master-branch in den nur ausgereifter code reinkommt der dann auch überall hin in production deployed wird und nebendran noch diverse development und test branches. Warum er aber die anderen Versionen unter Verschluss halten sollte leuchtet mir nicht ein. Wir arbeiten sehr oft zusammen und helfen uns gegenseitig aus. Dazu muss mir keiner irgendwelche Verzeichnisse per E-Mail schicken und bei jeder kleinen Veränderung wieder all den code noch mal schicken und ich dann meine Änderungen von hand in die neuere Version übertragen muss, das macht alles das merge kommando der Versionsverwaltung (zur Not fragt es mich was es machen soll, wenn es die beiden Versionen nicht selbst automatisch zusammenfügen kann).
Ganz ehrlich, ich habe den Sinn eines Versionskontrollsystems bisher noch nicht verstanden.
Ich hoffe ich konnte es dir hiermit etwas näherbringen, stell dir es vor wie ein unabhängiges Undo-System wo bei jedem Schritt auch beschrieben wird was gemacht wurde. Man kann auch selektiv Undo machen und zwischenschritte überspringen die doch funktionieren. Außerdem bekommt man ein großes log mit all den Veränderungen wer was wo wann und warum gemacht hat. Und man hat auch nur eine Kopie des codes sichtbar auf der Fesplatte, aber dennoch alle verschiedenen Versionen zugänglich, das spart Platz und ist vor allem Aufgeräumt. Außerdem ist standardisiert wie neue Versionen abgespeichert werden und man sieht nicht mehr so Listen auf der Fesplatte wie:
MyProject.1
MyProject.2
MyProject.3
MyProject.2008-08-11.4
MyProject.2008-08-11.5
MyProject.2008-08-12
MyProject.2008-08-12.1
bei denen man erst mal das Prinzip dessen der sich das System ausgedacht hat verstehen muss.
Wenn ich eine Version als "Milestone" konservieren will, dann archiviere ich den aktuellen Zwischenstand, und fertig. Das ist eine simple Kopieraktion (meinetwegen zusätzlich eine Komprimierung).
Im Versionssystem ist es nur ein Tag oder ein Label, der als String abgespeichert wird. Verbraucht nicht gleich den doppelten Platz, denn zwischen den Versionen werden immer nur die Veränderungen gespeichert, nicht der komplette Code.
Jeena