Branchen, Fixen, Mergen mit TortoiseSVN.
Wie man das Entwicklungsrepo strukturiert, darüber gehen die Meinungen auseinander. Für die Entwicklung unserer Software verwenden wir ein einfaches Modell, bestehen aus Branches für releaste Versionen und dem Trunk für die Weiterentwicklung.
Tritt nun ein Bug in der Version 4.9.x auf, wird dieser im Branch gefixt und die Änderung anschließend auch in den Trunk übernommen. Ein Release ist dann mit dem Branch möglich, da hier, idealerweise nur Bugfixes einfließen. Ausnahmen bestätigen die Regel, aber der Branch sollte immer releasefähig sein, falls ein Problem auftritt.
Bei jedem Hauptrelease wird ein neuer Branch angelegt. Z.B. 4.9 für alle 4.9.x Versionen. Jede releaste Version wird zudem getaggt.
Branch auschecken
Kommt ein Bug rein, checken wir den Branch aus. Hier soll der Bug behoben werden.
In dem ausgecheckten Branch wird der Bug nun behoben, die Änderungen vorgenommen. Anschließend wird der Kram wieder ins Repository committed.
Merge mit Trunk
Soweit so gut, aber der Bugfix soll in den meisten Fällen auch in den Trunk, damit auch zukünftige Versionen den Bugfix drinnen haben. Daher checken wir nun den Trunk aus und rufen hier den Merge auf. Lokal sollten keine uncommitteden Änderungen mehr vorliegen. Ggf. Update und Commit vorher machen.
Für unseren Fall ist es ein einfacher Merge von Revisionen.
Wir können festlegen, was wir mergen wollen. Wir wählen den Branch unter der URL aus.
In unserem Fall wollen wir eine “specific range” mergen, nur unseren Bugfix. Unter “Show log” wählen wir die Commits aus, welche wir mergen wollen.
Fertig! Mit Next geht weiter.
Wir können den Merge testen oder direkt mergen.
Beim Merge werden die Änderungen aus den Branch und der ausgewählten Commits in die lokale Working Copy übernommen. Idealerweise läuft es ohne Konflikte durch, ansonsten müssen die Änderungen von Hand geprüft und gemergt werden.
In unserem Fall hat alles geklappt, die Änderung ist im Trunk, aber noch nicht comitted. Läuft der Bugfix auch hier, können wir nun noch den Trunk commiten.
Anschließend sind Trunk und der Branch mit dem Bugfix versorgt.