Antworten:
Es gibt verschiedene Verwendungszwecke für die Verzweigung. Eine der häufigsten Anwendungen ist das Trennen von Projekten, die früher eine gemeinsame Codebasis hatten. Dies ist sehr nützlich, um mit Ihrem Code zu experimentieren, ohne die Hauptleitung zu beeinträchtigen.
Im Allgemeinen werden zwei Verzweigungstypen angezeigt:
Feature-Zweig: Wenn ein bestimmtes Feature so störend ist, dass nicht das gesamte Entwicklungsteam in einem frühen Stadium betroffen sein soll, können Sie einen Zweig erstellen, in dem diese Arbeit ausgeführt werden kann.
Fixes Branch: Während die Entwicklung auf dem Haupt-Trunk fortgesetzt wird, kann ein Fixes Branch erstellt werden, um die Fixes auf die neueste veröffentlichte Version der Software zu speichern.
Möglicherweise möchten Sie den folgenden Artikel lesen, in dem die Prinzipien der Verzweigung und deren Verwendung erläutert werden:
In allgemeiner Begriff, der Hauptzweck der Verzweigung (a VCS - Version Control System - Funktion) ist Code zu erreichen Isolation .
Sie haben mindestens einen Zweig, der für die sequentielle Entwicklung ausreichen kann und für viele Aufgaben verwendet wird, die in demselben eindeutigen Zweig aufgezeichnet (festgeschrieben) werden.
Aber dieses Modell zeigt schnell seine Grenzen:
Wenn Sie Entwicklungsaufwand haben (Refactoring, Evolution, Fehlerbehebungen, ...) und feststellen, dass Sie diese Änderungen nicht sicher in demselben Zweig wie in Ihrem aktuellen Entwicklungszweig vornehmen können (weil Sie die API beschädigen oder Code einführen würden, der fehlerhaft wäre alles), dann müssen Sie einen weiteren Zweig.
(Um diesen neuen Code für den alten zu isolieren , obwohl die beiden Codesätze später zusammengeführt werden)
Das ist also genau dort Ihre Antwort:
Sie sollten verzweigen, wenn Sie nicht zwei Entwicklungsbemühungen in einem Zweig verfolgen und aufzeichnen können.
(ohne eine schrecklich komplizierte Geschichte zu pflegen).
Ein Zweig kann nützlich sein, selbst wenn Sie der einzige sind, der am Quellcode arbeitet, oder wenn Sie viele sind.
Sie sollten jedoch nicht "einen Zweig pro Entwickler" erstellen :
Der Zweck "Isolierung" besteht darin, einen Entwicklungsaufwand zu isolieren (eine Aufgabe, die so allgemein sein kann wie "Lassen Sie uns die nächste Version unserer Software entwickeln" oder so spezifisch wie "Lassen Sie uns beheben" Fehler 23 "),
um eine" Ressource "nicht zu isolieren .
(Ein Zweig namens "VonC" bedeutet für einen anderen Entwickler nichts: Was ist, wenn "VonC" das Projekt verlässt? Was sollen Sie damit machen?
Ein Zweig namens "bugfix_212" kann beispielsweise im Kontext eines Bug-Tracking-Systems interpretiert werden und jeder Entwickler kann es mit zumindest einer Vorstellung davon verwenden, was er damit machen soll)
Ein Zweig ist kein Tag (SVN ist ein Revisionssystem, das versucht, Versionsfunktionen wie das Verzweigen und Markieren von Verzeichnissen mit billiger Dateikopie vorzuschlagen. Dies bedeutet nicht, dass ein Tag ein Zweig ist.)
Um einen Zweig zu definieren, müssen Sie auch einen Zusammenführungsworkflow definieren : Sie müssen wissen, wo Sie Ihren Zweig zusammenführen müssen, wenn Sie damit fertig sind.
Dafür ist das Kapitel 7 von Practical Perforce (Laura WINGERD - O'Reilly) eine gute Einführung (VCS-Agnostiker), um den Workflow zwischen verschiedenen Arten von Zweigen zusammenzuführen: "" Wie sich Software entwickelt "(pdf)
Es definiert den Begriff Codeline (Zweig, der wichtige Entwicklungsschritte des Codes aufzeichnet, entweder durch Tags an bestimmten Punkten oder durch wichtige Zusammenführung zum Zweig).
Es führt das Hauptlinienmodell (eine zentrale Codeline zum Aufzeichnen von Veröffentlichungen) ein und beschreibt verschiedene Zwecke für die Verzweigung:
Andere interessante Konzepte rund um VCS: Grundlegende Konzepte
(ursprünglich über ClearCase, aber auch für jedes VCS gültig)
Alle SCMs des 21. Jahrhunderts sagen Ihnen:
Verzweigen Sie für jede Aufgabe, an der Sie arbeiten müssen , unabhängig davon, ob es sich um eine neue Funktion, einen Bugfix oder einen Test handelt. Dies wird als Themenzweig bezeichnet und ändert die Art und Weise, wie Sie mit Ihrem SCM arbeiten.
Du erhältst:
Tools, die das können:
Tools, die das nicht können:
Dies hängt auch vom verwendeten SCM-Tool ab. Moderne SCMs (Git, Mercurial usw.) machen es immer einfacher, Zweige bei Bedarf zu erstellen und zu zerstören. Auf diese Weise können Sie beispielsweise einen Zweig pro Fehler erstellen, an dem Sie arbeiten. Sobald Sie Ihre Ergebnisse in den Trunk zusammenführen, verwerfen Sie den Zweig.
Andere SCMs, zum Beispiel Subversion und CVS, haben ein viel "schwereres" Verzweigungsparadigma. Das heißt, ein Zweig wird nur für etwas größer als ein Patch mit zwanzig Zeilen als geeignet angesehen. Dort werden Zweige klassisch verwendet, um ganze Entwicklungsspuren wie eine frühere oder zukünftige Produktversion zu verfolgen.
Wenn Sie signifikante und / oder experimentelle Änderungen an Ihrer Codebasis vornehmen müssen, insbesondere wenn Sie Zwischenänderungen vornehmen möchten, ohne die Amtsleitung zu beeinträchtigen.
Dies hängt davon ab, welche Art von SCM Sie verwenden.
In den neueren verteilten Versionen (wie Git und Mercurial) erstellen Sie ständig Zweige und werden trotzdem neu zusammengeführt. Ich arbeite oft eine Weile an einem separaten Zweig, nur weil jemand den Build auf der Hauptleitung unterbrochen hat oder weil das Netzwerk ausgefallen ist, und füge dann Änderungen später wieder zusammen, wenn sie behoben sind, und es ist so einfach, dass es nicht einmal ärgerlich ist .
Das Dokument (kurz und lesbar), das mir am meisten geholfen hat zu verstehen, was in den verteilten Systemen vor sich ging, ist: UnderstandingMercurial .
In den älteren Systemen mit einem zentralen Repository (wie CVS, SVN und ClearCase) ist es ein viel schwerwiegenderes Problem, das auf Teamebene entschieden werden muss, und die Antwort sollte eher lauten: "Eine alte Version beibehalten, während dies zulässig ist." Entwicklung auf der Hauptstrecke "oder" als Teil eines großen Experiments "fortzusetzen.
Das verteilte Modell ist viel besser, denke ich, und es fehlen nur nette grafische Werkzeuge, um das vorherrschende Paradigma zu werden. Es ist jedoch nicht so weit verbreitet und die Konzepte sind unterschiedlich, so dass es für neue Benutzer verwirrend sein kann.
Ich finde den Rat von Laura Wingerd & Christopher Seiwald bei Perforce wirklich prägnant und nützlich:
* Branch only when necessary.
* Don't copy when you mean to branch.
* Branch on incompatible policy.
* Branch late.
* Branch, instead of freeze.
Unter http://www.perforce.com/sites/default/files/pdf/perforce-best-practices.pdf finden Sie eine detaillierte Erläuterung der einzelnen Methoden und anderer bewährter Methoden.
Es gibt verschiedene Zwecke für die Verzweigung:
Wann immer Sie Lust dazu haben.
Sie werden wahrscheinlich nicht sehr häufig arbeiten, wenn Sie mit einem zentralisierten SCM arbeiten, da die Zweige Teil des offiziellen Repositorys sind, und das lädt nicht wirklich zum Experimentieren ein, ganz zu schweigen davon, dass Zusammenführungen wirklich weh tun.
OTOH, es gibt keinen technischen Unterschied zwischen einer Filiale und einer Kaufabwicklung in verteilten SCMs, und Zusammenführungen sind viel einfacher. Sie werden viel häufiger Lust haben, sich zu verzweigen.
Wenn Sie basierend auf Ihrem aktuellen Zweig Änderungen vornehmen müssen, die nicht für die nächste Version dieses Zweigs bestimmt sind (und nicht vorher).
Zum Beispiel arbeiten wir normalerweise am Kofferraum. Ungefähr zum Zeitpunkt der Veröffentlichung muss jemand eine Änderung vornehmen, die wir in der aktuellen Version nicht möchten (möglicherweise vor der Veröffentlichung, im Moment normalerweise nach der Veröffentlichung). Dies ist der Zeitpunkt, an dem wir verzweigen, um die Version in eine eigene Verzweigung zu stellen und die Entwicklung für die nächste Version auf Trunk fortzusetzen.
Alle technischen Details beiseite lassen .....
Verzweigen Sie, wenn Sie wissen, dass es einfacher ist, wieder zusammenzuführen!
Beachten Sie, dass die Zusammenführung immer davon abhängt, wie die Arbeit in einem Projekt ausgeführt wird.
Sobald dies erreicht ist, werden alle anderen tertiären Themen ins Spiel kommen.