Subversion: Repository aufteilen
Candid Dauth
- software
0 Erwin2 Thomas J.S.0 Erwin0 Candid Dauth
Heißa, alle,
ich habe bisher den Fehler gemacht, dass ich mehrere Projekte in einem Repository gespeichert habe, und zwar ohne mich an diese trunk-branches-tags-Struktur zu halten. Ich würde jetzt gerne mein Repository aufteilen, dass jedes Projekt sein eigenes Repository hat, und zwar mit der trunk-branches-tags-Struktur. Ich kenne mich nicht allzu sehr aus mit Subversion, ich weiß, wie man seine Änderungen hoch- und runterlädt, und mein Repository habe ich damals nach dem Turtorial auf gentoo-wiki.com Schritt für Schritt erstellt, ohne mir wirklich anzuschauen, wie das ganze mit den Berkeley-Datenbanken aufgebaut wird.
Deswegen habe ich keine Ahnung, wie ich das ganze überhaupt angehen soll. Ich weiß nur, was ich erreichen will. Machen wir ein einfaches Beispiel, mit fünf Revisions, in zwei Projekten, die bei mir in einem Repository liegen:
Revision 1: Änderung in Projekt 1 vor 2 Monaten
Revision 2: Änderung in Projekt 1 vor 1 Monat
Revision 3: Änderung in Projekt 2 vor zwei Wochen
Revision 4: Änderung in Projekt 1 vor einer Woche
Revision 5: Änderung in Projekt 2 vor drei Tagen
Es sollte nun bestenfalls so aufgeteilt werden, dass die Änderungsdata erhalten bleiben, aber die Revisions aufgestockt werden, sodass keine „leeren“ Revisions ohne Änderung entstehen. Projekt 1 wird in Repository 1 verschoben, Projekt 2 in Repository 2, diese müssten dann so aussehen:
Repository 1: Revision 1: Änderung vor 2 Monaten
Revision 2: Änderung vor 1 Monat
Revision 3: Änderung vor einer Woche
Repository 2: Revision 1: Änderung vor zwei Wochen
Revision 2: Änderung vor drei Tagen
Die Daten müssten dann eben ins trunk der neuen Repositories verschoben werden, und branches und tags müsste man aus bestimmten Revisionen erstellen, bestenfalls unter Erhaltung des Datums der Revision.
Ich hoffe, es ist einigermaßen klar, was ich erreichen will. Wenn nicht, fragt einfach nochmal nach.
Gibt es jetzt hierfür ein vorgefertigtes Programm oder muss ich mich intensiver mit Berkeley-DB und Subversion beschäftigen, um die Änderungen von Hand/per Script durchzuführen?
Nebenbei hätte ich noch eine Frage: Wie stellt man das eigentlich am besten an, dass man branches und tags aus dem trunk erstellt? Hat man in seiner lokalen Arbeitskopie die ganze tags-branches-trunk-Struktur gespiegelt und kopiert dann beim Erscheinen einer neuen Version das trunk-Verzeichnis per svn cp in das entsprechende Verzeichnis in tags bzw. branches?
Gautera!
Grüße aus Biberach Riss,
Candid Dauth
Hi,
ich empfehle dir Tortoise SVN für Windows. Dann checkst du das Repository ab der Wurzel aus. Du hast nun im Explorer eine genaue (sehr hilfreiche) Übersicht über dein Repository und kannst es nach belieben bearbeiten (branching, merging, commit etc.).
Für den aufwendigeren merge empfehle ich dir das (online-)Buch Version Control with Subversion, dort ist eigentlich alles anhand eines Beispiels erklärt! Es gibt auch eine deutsche Übersetzung, allerdings nur gegen Bares.
Viel Glück beim merging ;)
p.s.: auf der Berkley-Datenbank hast du _nichts_ zu suchen, diese wird allein von Subversion verwaltet!
Heißa, Erwin,
ich empfehle dir Tortoise SVN für Windows. Dann checkst du das Repository ab der Wurzel aus. Du hast nun im Explorer eine genaue (sehr hilfreiche) Übersicht über dein Repository und kannst es nach belieben bearbeiten (branching, merging, commit etc.).
Leider habe ich kein Windows, aber neulich hatten wir eine Diskussion hierüber im Chat, empfohlen wurden mir kdesvn und esvn, beide scheinen mehr oder weniger den gleichen Funktionsumfang zu haben, für aufwändige Operationen verwende ich deswegen wohl kdesvn, ansonsten, glaube ich, ist die Kommandozeile doch ein wenig praktischer.
Gautera!
Grüße aus Biberach Riss,
Candid Dauth
Hallo,
ich habe bisher den Fehler gemacht, dass ich mehrere Projekte in einem Repository gespeichert habe,
Das ist kein Fehler.
und zwar ohne mich an diese trunk-branches-tags-Struktur zu halten.
Das ist nur bedingt ein Fehler.
Wir haben hier auch nur ein Repository und darin sind alle Projekte, für die wir Versionierung brauchen, enthalten. Dabie haben nicht alle Projekte immer ein branches-tags-trunk Struktur (manche haben eben nur den trunk).
Ich würde jetzt gerne mein Repository aufteilen, dass jedes Projekt sein eigenes Repository hat,
Das wäre m.E. eher ein Fehler bzw. ich denke, dass das nicht wirklich nötig ist.
Du kannst im Repository für jedes Projekt ein eigenes Verzeichnis anlegen, in diesem die b-t-t Struktur erstellen und deine bestehende Dateien in die entsprchenden Verzeichnisse verschieben.
Nebenbei hätte ich noch eine Frage: Wie stellt man das eigentlich am besten an, dass man branches und tags aus dem trunk erstellt? Hat man in seiner lokalen Arbeitskopie die ganze tags-branches-trunk-Struktur gespiegelt und kopiert dann beim Erscheinen einer neuen Version das trunk-Verzeichnis per svn cp in das entsprechende Verzeichnis in tags bzw. branches?
Wenn du das brauchst ja.
Wie du aus dem Bild entnehmen kannst, haben wir für SELFHTML zwei branches:
(8 und 8.1) und zwei tags (8.1 und 8.1.1) und im trunk die Dokumentation.
Die Version 8 wurde als branche einfach so hineingestellt und bleibt nun auch so belassen. Diese Version wurde auch im trunk eingestellt und dort zu Version 8.1 entwickelt.
Danach haben wir gewechselt: Es wurde - als 8.1 fertig war - ein tag erstellt, als Snapshot des aktuellen Standes. Daran wird sich auch nichts mehr ändern.
Es wurde auch ein branche mit dem Stand angelegt (8.1): und in diesem wurde dann weitergarbeitet bis wir Version 8.1.1 fertig hatten.
Dann wurde auch für 8.1.1 ein tag erstellt und auch daran wird sich nichts ändern. Wir wollten keine eigene branche für 8.1.1 d.h. wir arbeiten weiter in der 8.1 branche und entwickeln die Doku in diesem weiter zu 8.1.2.
Im trunk passiert einstweilen nichts, aber dort werden wir dann SELFHTML 9 entwickeln.
Naürlich könnten wir die branches in den trunk zurückmergen, aber da bei SELFHTML 9 sich alles ändern wird und keine HTML-Dateien übernommen werden, ist das nicht nötig.
Aber vielleicht solltest du dir zuerst das Buch http://svnbook.red-bean.com/ durchlesen (bes. vll. http://svnbook.red-bean.com/en/1.1/ch04.html
Grüße
Thomas
Hi,
Wie du aus dem Bild entnehmen kannst, haben wir für SELFHTML zwei branches: ...
Danach haben wir gewechselt: Es wurde - als 8.1 fertig war - ein tag erstellt, ...
nur mal aus Interesse, wie unterscheidet ihr branches und tags,
also welches Unterscheidungskriterium wendet ihr an (da ja von der Bedeutung beides gleich ist)?
Moin!
nur mal aus Interesse, wie unterscheidet ihr branches und tags,
also welches Unterscheidungskriterium wendet ihr an (da ja von der Bedeutung beides gleich ist)?
Wenn es im Verzeichnis "branches" ist, ist es ein branch.
Wenn es im Verzeichnis "tags" ist, ist es ein tag.
So einfach. :) Aber du wolltest vermutlich etwas anderes wissen. Bitte formuliere die Frage mal um.
- Sven Rautenberg
Hallo,
nur mal aus Interesse, wie unterscheidet ihr branches und tags,
also welches Unterscheidungskriterium wendet ihr an (da ja von der Bedeutung beides gleich ist)?
Ein Version bei uns in tags ist ein Snapshot eines Entwicklungsstandes einer gegebenen Zeit. Im diesen Verzeichnissen wird nicht mehr gearbeitet. D.h. die Version im tags ist fixiert. In einem branche wird weitergearbietet an einer bestimmten Version, bis sie einen Status erreicht, wo daraus wieder eine fixe Version erstellt werden kann. Dann gibts davon ein Snapshot --> eine Version in tags.
Guck dir mal den Kapitel http://svnbook.red-bean.com/en/1.1/ch04.html an, auch wenn wir nicht alles davon was möglich wäre nutzen und einsetzen, sind die Ideen dort diejenigen, die wir auch verwenden.
Grüße
Thomas
Heißa, Thomas,
vielen Dank erstmal für deine Antwort.
ich habe bisher den Fehler gemacht, dass ich mehrere Projekte in einem Repository gespeichert habe,
Das ist kein Fehler.
Wir haben hier auch nur ein Repository und darin sind alle Projekte, für die wir Versionierung brauchen, enthalten.
Ja, die Projekte hier haben auch alle irgendwie etwas miteinander zu tun. Die Projekte in meinem Repository sind völlig unabhängig voneinander und haben quasi nicht im Geringsten etwas miteinander zu tun, weshalb mir eine Aufteilung doch lieb wäre, sofern das möglich ist.
Du kannst im Repository für jedes Projekt ein eigenes Verzeichnis anlegen, in diesem die b-t-t Struktur erstellen und deine bestehende Dateien in die entsprchenden Verzeichnisse verschieben.
Ja, ich denke, dass ich das vorläufig so machen werde. Wenn ich mich richtig erinnere, war das zum Beispiel ein wichtiger Vorteil von SVN gegenüber CVS, dass es beim Verschieben einer Datei die komplette History beibehält, liege ich da richtig?
Aber vielleicht solltest du dir zuerst das Buch http://svnbook.red-bean.com/ durchlesen (bes. vll. http://svnbook.red-bean.com/en/1.1/ch04.html
Ja, werde ich bei Gelegenheit machen, ich habe es mir schon heruntergeladen. Es war mir nur ein bisschen viel im Moment.
Gerade fällt mir auf, dass das Aufsplitten theoretisch doch nicht so umständlich ist, wie ich gedacht habe. Es gibt ja die Möglichkeit, eine Revision aus einem Repository zu löschen (ich weiß nur nicht mehr, wie das geht). Ich müsste dann mein ganzes Repository nur ein paarmal kopieren und aus den Duplikaten jeweils die Revisions löschen, die Änderungen an anderen Projekten enthalten als dem, für das ich das Repository ausschließlich verwenden will. Ich denke, ich werde mich jetzt auf die Suche machen, ob beim Löschen einer Revision alle folgenden Revisions aufrücken (also sich deren Nummer verringert), damit keine leeren Revisions entstehen, bzw. ob es eine Möglichkeit dazu gibt.
Gautera!
Grüße aus Biberach Riss,
Candid Dauth