Was sind die Vorteile von branching als Einzelentwickler?

117

Zunächst einmal bin ich mir bewusst, dass viele Fragen zu VCS als Solo-Entwickler gestellt wurden, aber sie sind oft zu weit gefasst. Dies betrifft nur die Verzweigung und wurde dennoch als Duplikat markiert ... Das vermeintliche Duplikat wird wiederum als ein weiteres Duplikat einer anderen Frage markiert, die zu weit gefasst ist und sich nicht speziell auf die Verzweigung bezieht. So ist meine Frage einzigartig.

Welche Vorteile hat es, wenn Sie als Solo-Entwickler Branching einsetzen? Ich habe oft gesehen, dass es sogar in einem Solo-Entwickler-Kontext empfohlen wird, aber soweit ich sehen kann, sehe ich nicht, wie, abgesehen von der Verwendung eines 'Master'-Trunks für die Entwicklung und dem Verzweigen für funktionierenden, release-fähigen Code Ich könnte die Macht der Verzweigung nutzen (zum Beispiel, um neue Funktionen zu unterteilen), ohne den gesamten Entwicklungsprozess zu komplizieren.

flatterino
quelle
14
Es tut mir leid, ich gebe zu, dass ich im StackExchange-Modell nicht sehr erfahren bin, aber ich muss verstehen, dass „Best Practices“ oder andere Fragen, die keine einzige deterministische Antwort haben, verpönt sind oder auch nicht darf diskutiert werden? Ich sehe viele meinungsbasierte Beispiele für vermeintlich gültige Fragen, auch im "verwandten" Abschnitt dieser Frage, wie z. B. " softwareengineering.stackexchange.com/questions/286928" oder " softwareengineering.stackexchange.com/questions/132730
flatterino
8
Ich bin mit Man einverstanden, dass diese Frage kein genaues Duplikat ist (die Unterschiede im Geltungsbereich sind erheblich), aber das Duplikat der verknüpften Duplikat-Zielfrage enthält zufällig Antworten zu dem Thema, an dem Sie interessiert sind - gibt es solche ? Antworten deckten nicht ab, dass Sie mehr darüber hören möchten?
jrh 16.01.18
4
Ich war der Meinung, dass diese Frage zwar dieses Thema abdeckt, dies jedoch tangential (der Benutzer stellt 3 verschiedene Fragen in Bezug auf verschiedene Aspekte der Verzweigung), und tatsächlich wurde die Frage selbst geschlossen, weil sie aus genau diesem Grund "zu weit gefasst" war. Ich hatte gehofft, eine Diskussion über dieses sehr spezifische Merkmal von VCS in diesem ähnlich spezifischen Kontext zu beginnen. Um Ihre Frage zu beantworten, wurden bisher einige Aspekte hier erwähnt (in den Antworten und Kommentaren zu diesen Antworten), die in den Antworten auf die Frage, auf die Sie verwiesen haben, nicht erwähnt wurden. Vielen Dank für Ihre Beiträge.
Flatterino
3
Dan, noch einmal ... die Frage, die Sie verlinkt haben, lautet: "Als einziger Entwickler würde es mir jetzt zugute kommen, welche Git- oder GitHub-Funktionen ich nutzen könnte." Eine mögliche Antwort auf diese Frage könnte unter anderem "Verzweigung" sein. Das wäre keine Antwort auf meine Frage. Auch wurde es aus dem gleichen Grund als zu weit geschlossen. Bitte lesen Sie die Erklärung oben auf meiner Frage. Ich musste meinen Beitrag jetzt dreimal bearbeiten ...
flatterino

Antworten:

199

Die Vorteile sind meist die gleichen wie für Entwicklergruppen. Wenn Sie einen Master-Zweig verwenden, der immer für die Freigabe bereit ist, und Feature-Zweige zum Entwickeln neuer Features, können Sie den Master jederzeit freigeben. Finden Sie einen wichtigen Fehler, während Sie an einer Funktion arbeiten? Zweig wechseln, reparieren, loslassen, zurückschalten und weiterentwickeln.

Oder vielleicht ist dies ein Hobbyprojekt und Sie möchten einfach ein bisschen an dieser und jener Funktion arbeiten können, wie es Ihnen die Stimmung einfällt. Sie emulieren im Grunde genommen ein Team aus mehreren Personen, indem Sie die Zeit abschneiden.

Die implizite Verzweigung, die DVCSs auf Klonen ausführen, bedeutet, dass es bei formalen Verzweigungen im autorisierenden Repository weniger darum geht, Personen zu koordinieren, sondern vielmehr darum, Entwicklungsrichtungen zu koordinieren, und sogar eine einzelne Person kann mehrere dieser Verzweigungen ausführen.

Sebastian Redl
quelle
1
Genau. Gruppen nicht müssen Zweige verwenden, entweder-ich habe für Teams gearbeitet , die dies nicht taten. Zugegeben, das lag größtenteils an der Unkenntnis von Git, und all diese Teams lernten, Zweige zu verwenden, da Probleme mit deren Nichtbenutzung auftraten, aber diese Probleme würden auch für einen Solo-Entwickler zutreffen.
KRyan
42

Langjährige Entwicklung

Das Verzweigen für ein Team mit nur einer Person wäre nützlich für eine langfristige Entwicklungsfunktion, die ansonsten nicht in Ihren Release-Zyklus passt.

Sie können einen Zweig für Ihre mehrmonatige Änderung übernehmen und dennoch in regelmäßigen Abständen die alltäglichen Fehlerbehebungen oder Änderungen in Ihrem Hauptzweig vornehmen.

Dies hat gegenüber "Switches" in einem einzelnen Zweig den Vorteil, dass sich Ihr Hauptzweig immer in einem bereitstellbaren Zustand befindet und Sie garantiert sind, dass sich nichts in der langfristigen Funktion auf anderen, zuvor getesteten Code ausgewirkt hat.

Experimentelle Funktionen

Eine Verzweigung kann auch für Features nützlich sein, für die Sie möglicherweise Prototypen erstellen möchten, die es jedoch möglicherweise nie in Ihren implementierten Code schaffen. Wenn Sie diese in einem Zweig vervollständigen, der letztendlich weggeworfen wird, wird Ihre Hauptcodebasis nie unnötig verschmutzt.

Paddy
quelle
16

Ich benutze es für wichtige Website-Wartung. Ich bin der einzige Entwickler, aber ich habe einen Meister, entwickle und stelle Zweige aus.

Mein Arbeitsprozess für die Site-Einrichtung sieht folgendermaßen aus:

  1. Mach den Master-Zweig funktionsfähig. Erstes Commit durchführen.

  2. Kasse entwickeln Zweig. Tun Sie nichts, entwickeln Sie Funktionen als Testpuffer für das Zusammenführen mit dem Master.

  3. Checkout Issue Branch. Codieren Sie Ihr Problem, wenn es fertig ist, ziehen Sie es in die Entwicklung, prüfen Sie, ob Probleme auftreten, führen Sie Konflikte zusammen usw. ... beheben Sie diese.

Wenn genügend Probleme für eine Veröffentlichung in "Develop" zusammengeführt wurden und "Develop" auf Stabilität getestet wurde, ziehen Sie "Develop" in "Master".

   Master
     |
   Develop  - E
   / |  \  \
 A   B   C  D

Auf diese Weise erhalten Sie eine vollständige Testsammlung in Develop, in der Sie Stabilität, Probleme usw. testen können, ohne das Risiko einzugehen, den Master zu verletzen, und Commits zurückzusetzen, wenn sie schädlich sind.

Indem Sie einzelne Filialen für das Festschreiben verwenden, können Sie die bereits geleistete Arbeit "verlassen", mit etwas anderem neu beginnen, um ein dringenderes Problem zu beheben, und das Problem früher ausrollen.

Im wirklichen Leben habe ich normalerweise einen Ausgabezweig und ziehe diesen in Entwicklung und dann in Master. Manchmal ist es langweilig, aber mindestens alle zwei Monate muss ich die Arbeit auf den Kopf stellen, weil jemand die Idee hatte, dass ich RightNow ™ machen muss, und auf diese Weise kann ich schnell wieder in einen Grundzustand zurückkehren, um das Ding zu machen und dann weiter wo ich war. Gerade bei großen Projekten, die mehrere Wochen dauern, ist dies ein Glücksfall, dass ich schnell die Filiale wechseln kann.

Betrachten Sie dieses Szenario: Sie immer auf einem Hauptzweig arbeiten , und Sie haben AwesomeCodeThing ™ in den Werken , die Ihre Master - Zweig - Blätter in einer offenen Herzoperation und ein YugeBug ™ erscheint , dass dringende Fixierung benötigt sonst Tausende von Benutzern werden Ihnen beschweren sich über BigProblems ™
Der Nur so können Sie Ihr Problem in einem solchen Szenario schnell lösen.

  1. Überprüfen Sie Ihre bisherigen Commits.
  2. Sehen Sie, wann Ihre letzte stabile Festschreibung war (Fluchen ist optional).
  3. Rollback zu diesem Commit
  4. Fix machen, Fix raus in die Produktion schieben
  5. Löse alle Konflikte und Probleme, die du jetzt hast und versuchst, zum AwesomeCodeThing ™ -Status zurückzukehren
  6. aufgeben, weinen und von vorne anfangen (optional)

Wenn Sie Zweige verwenden:

  1. Checkout-Master
  2. erstelle einen Zweig UrgentFix ™ und repariere Sachen
  3. Ziehen Sie UrgentFix ™ in den Master
  4. zur Produktion drängen
  5. Master in Develop zusammenführen
  6. Zusammenführen und zu AwesomeCodeThing ™ entwickeln
  7. hol ein bier und arbeite weiter.
Tschallacka
quelle
13
Vor dem Fortfahren ein Bier zu trinken ist nicht optional.
JamesB
4
@ JamesB Ein Bier vor dem Start ist nicht optional :)
Chris Cirefice
4

Verzweigungen erleichtern das gleichzeitige Bearbeiten mehrerer Features. Dies kann hilfreich sein, wenn sich die Prioritäten im Verlauf eines Projekts ändern.

Angenommen, Sie entscheiden, dass eine Funktion jetzt wichtiger ist. Vielleicht müssen Sie dringend einen kritischen Fehler in einem Live-System beheben. Möglicherweise arbeiten Sie über einen längeren Zeitraum mit einem Client an mehreren Features und möchten den Fortschritt der einzelnen Features separat demonstrieren. Vielleicht haben Sie gerade von einem fiesen Zero-Day-Exploit gelesen und möchten darauf zugreifen, bevor der Client davon liest.

Wenn Sie für jede Funktion / jeden Hotfix Verzweigungen verwenden, ist es in der Regel einfacher, sauberer und schneller, diese Änderungen zu isolieren und bereitzustellen, als für alle Funktionen eine einzige Verzweigung zu verwenden. Dies gilt unabhängig davon, ob Sie alleiniger Entwickler oder Teil eines Teams sind.

Was einen tatsächlichen Prozess angeht, finde ich, dass Git Flow gut funktioniert. Daniel Kummers Git Flow-Spickzettel ist eine großartige Ressource. Es lohnt sich, sie sich anzuschauen, auch wenn Sie kein Git verwenden.

Andrew Calder
quelle
2

Wie bereits von anderen Postern erwähnt, ähneln die Vorteile im Wesentlichen der Arbeit in Teams: Die Fähigkeit, Features unabhängig zu entwickeln und zu testen, einen separaten Hauptzweig für Hotfixes / Produktionsbereitstellungen zu unterhalten und zu experimentieren.

Für mich persönlich neige ich im Allgemeinen dazu, im Master zu arbeiten, wenn ich den Bereich, in dem ich arbeite, sehr gut kenne. Das erhöht nur den Aufwand für die Verzweigung, da ich sie sowieso nur zusammenführe.

Allerdings , wenn ich jedes Zögern über die Änderungen , die ich mache mir werde verzweigen und nur PR / fusionieren , wenn der Zweig wie erwartet verhält und wird in der Regel vollständig getestet. Auf diese Weise kann ich mich nicht mehr an die Syntax für das Zurücksetzen einer Reihe von Commits erinnern, sondern daran, dass ein Rollback die beste Vorgehensweise ist.

RmxPatrick
quelle