Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
da ich zuvor noch nie etwas mit Versionsverwaltung zu tun hatte, habe ich mich vor einigen Tagen dazu entschieden mich in Subversion einzuarbeiten.
Eigener SVN-Server läuft bereits einwandfrei, die wichtigsten Begriffe wie Commit, Update, Check Out, usw. sind mir nicht mehr Fremd.
Die "standard" Verzeichnisstruktur eines Projektes im Repository sollte sich in die Verzeichnisse trunk, branches und tags unterteilen, hierzu habe ich jedoch noch einige Fragen:
Ist es richtig das sich im Trunk Verzeichnis immer nur eine Version des Projekt befindet (Hauptzweig)?
Sollte ich eine lauffähige Version erstellt haben die Benutzer verwenden können, erstelle ich sowohl einen "Branch" als auch "Tag" von dieser? Im Hauptzweig wird dann an der nächsten Version gearbeitet, Fehler in der Ausgelieferten Version werden im "Branch" korrigiert, durch "mergen" werden diese dann auch im "trunk" korrigiert. Richtig?
Eine Versionen die im Tag Verzeichnis liegt wird somit nie mehr geändert?
Gibt es "standard" Benennungen für Branches und Tags?
So und nun zu meiner eigentlichen Frage weswegen ich dieses Thema überhaupt eröffnet habe: Was wird alles ausgecheckt?
Sofern ich am Hauptzweig(trunk) arbeiten will, genügt es auch nur nur diesen aus zu checken, oder? Wie sieht es jedoch aus wenn ich parallel auch noch Fehler an einem branch beheben möchte, erstelle ich dann einfach ein neues Projekt in dem ich an dem branch arbeite? Wie sieht es in der Praxis aus?
Für Erfahrene ist es sicherlich ein klacks mal eben Licht ins Dunkel zu bringen, möchte nämlich ungern bereits am Anfang alles falsch machen bzw. mit falschem Wissen weiterarbeiten. Danke im voraus!
Ich versuche dann mal alles zu beantworten, wobei manche deiner Fragen auch Geschmackssache ist.
1) Ja, der trunk repräsentiert genau eine Version des Produktes (idr. ist dies der Hauptentwicklungszweig).
2) Richtig, so kann man das auf jeden Fall machen. Abweichend hiervon, kann man auch erstmal nur einen Tag anlegen und den Branch dann anlegen (dann vom Tag), wenn ein Fehler auftaucht, denn ohne Fehler braucht man den Branch nicht, sondern nur das Tag. Alternativ muss man auch häufig vom Trunk einen Branch ziehen um noch für das Release spezifische Dinge zu machen (die dann auch nicht auf den Trunk gemerged werden). Dann tagged man den Branch, wenn dieser Release fertig ist.
3) Richtig (technisch gesehen kann man dies und in ganz ganz ganz seltenen Fällen kann man auch auf einen Tag nochmal comitten, sollte man aber eigentlich nicht).
4) Die gibt es bestimmt, aber keine Allgemeinen ;-) Imho sollte ein Tag wenigstens die genau Versionsnummer enthalten (meistens wird hier auch der Produktname auch noch verwendet, z.B. produktA-1.0.1), und auch ein Branch sollte imho die Versionsnummer enthalten (z.B. produktA-1.0.x).
5) Dafür gibt es zwei Möglichkeiten:
a) Du checkst wirklich nur den Trunk aus und anschließend bei Bedarf den Branch auch einzeln.
b) Du checkst einfach das ganze Repository (inklusive Branches/Tags) aus.
Beide Varianten sind imho "gleich" gut und hängen einfach vom Projekt ab. Wenn du mal einen Trunk hast, der mehrere hunderte MB groß ist, und du dazu noch 10 Branches hast, nimmt das Projekt mal eben ein paar GB Plattenplatz in beschlag, aber für kleine Projekte ist das sicher machbar.
b) Du checkst einfach das ganze Repository (inklusive Branches/Tags) aus.
Beide Varianten sind imho "gleich" gut und hängen einfach vom Projekt ab. Wenn du mal einen Trunk hast, der mehrere hunderte MB groß ist, und du dazu noch 10 Branches hast, nimmt das Projekt mal eben ein paar GB Plattenplatz in beschlag, aber für kleine Projekte ist das sicher machbar.
Ich habe für jeden Entwicklungszweig (also TRUNK und verschiedene Branches) jeweils einen Workspace angelegt, in den der jeweilige Teil ausgecheckt ist. Wenn nötig, kann man dann mehrere Eclipse-Instanzen öffnen.