github team workflow - gabeln oder nicht?

21

Wir sind ein kleines Team von Webentwicklern, die derzeit Subversion verwenden, aber bald wechseln wir zu Github.

Ich betrachte verschiedene Arten von Github-Workflows und wir sind uns nicht sicher, ob das gesamte Forking-Konzept in Github für jeden Entwickler eine so gute Idee für uns ist.

Wenn wir Forks verwenden, wird jeder Entwickler seine eigenen Remote- und lokalen Repositorys haben. Ich mache mir Sorgen, dass das Pushen von Änderungssätzen zu schwierig und zu komplex wird. Meine größte Sorge ist auch, dass jeder Entwickler dazu gezwungen wird, zwei Fernbedienungen zu haben: Origin (das ist der Remote-Zweig) und einen Upstream (der zum "Synchronisieren" von Änderungen aus dem Haupt-Repository verwendet wird). Ich bin mir nicht sicher, ob es so einfach ist, Dinge zu tun.

Dies ähnelt dem hier erläuterten Workflow: https://github.com/usm-data-analysis/usm-data-analysis.github.com/wiki/Git-workflow

Wenn wir keine Gabeln verwenden, können wir wahrscheinlich mit einem zentralen Repository zurechtkommen, indem wir für jede Aufgabe, an der wir arbeiten, einen Zweig erstellen und diese in den Entwicklungszweig desselben Repositorys zusammenführen. Dies bedeutet, dass wir das Zusammenführen von Zweigen nicht einschränken können und es möglicherweise etwas unübersichtlich ist, viele Zweige im zentralen Repository zu haben.

Irgendwelche Vorschläge von Teams, die beide Arbeitsabläufe ausprobiert haben?

aporat
quelle
3
gabeln oder nicht gabeln
Lukasz Madon

Antworten:

9

Ich denke, Ihre Furcht vor dem Gabeln kommt von der weniger als herausragenden Verschmelzung von SVN - denn es ist nicht das Gabeln, das das Problem verursacht - es ist die Verschmelzung.

Tauchen Sie ein - Sie werden feststellen, dass es wirklich großartig ist! Sie müssen nicht übersteuern (nicht bei jeder Änderung in jeder Datei), sondern können nach Features suchen und diese wieder zusammenführen.

Stellen Sie sich GitHub als mehrere Versionen vor, die eine Verbesserung vieler Kernkonzepte der Quellcodeverwaltung wert sind.

Das Konzept eines "stabilen" Zweigs und eines "aktiven Entwicklungszweigs" deckt auch viele dieser Probleme ab, wenn Sie zögern, mit dem Gabeln zu beginnen. : P

jefflunt
quelle
19
Wenn Sie alle Instanzen von "fork" durch "branch" ersetzen, stimme ich zu. Es ging jedoch darum, zwei (oder mehr) entfernte Repositorys zu forken und zu behandeln.
David Harkness
8

Wir haben beides versucht, mit Entwicklern, die in svn sehr zu Hause sind. Und wenn Sie eine Gruppe von Entwicklern sind, die bereits zusammenarbeiten und sich gegenseitig mit Commit-Rechten vertrauen, wird es Ihnen wahrscheinlich leichter fallen, nur ein einziges, zentrales Repo bei git zu halten und Sie alle als Mitbearbeiter dieses Repos hinzuzufügen.

Wir machen immer noch gelegentlich private Gabeln, aber das ist typisch für exotische Änderungen oder Ein-Personen-Tests, an denen der Rest normalerweise nicht interessiert ist, die wir aber trotzdem aus der Ferne aufbewahren möchten.

Ich würde mit einem einzigen zentralen Repo beginnen und nur eine Weile mit Git arbeiten. Vielleicht wächst die private Gabel an dir, vielleicht nicht. Beides ist in Ordnung.

Pål Brattberg
quelle
6

In git ist eine Gabel wirklich nur ein weiterer Zweig. Mit dem Workflow, der für jeden Entwickler individuell ist, müssen Sie effektiv festlegen, dass jeder Entwickler über eine öffentliche (Remote-) Zweigstelle verfügt, um seine Entwicklungsänderungen nachzuverfolgen. Dies ist hilfreich, um direkt (Peer-to-Peer) zwischen Entwicklern zusammenarbeiten zu können. Sie müssen in jedem Fall die Änderungen jedes Entwicklers in das zentrale Repo einbinden, daher ist der zusätzliche Aufwand meines Erachtens gering.

troelskn
quelle
3

Für ein kleines Team von 2-3 Entwicklern ist es in Ordnung, Verzweigungen im Repo zu verwenden, um Fixes und Funktionen zu verwalten. Das Problem ist, wenn Sie mehr Entwickler als das und mehr Features und Fixes haben, die entwickelt werden.

In diesem Fall wird Ihr Haupt-Repo in Github Hunderte von Filialen haben. Einige werden alt und vergessen und unversehrt sein.

Sie haben auch Probleme mit der Zusammenarbeit, wenn jemand einen gemeinsam genutzten Zweig, der sich im Repo befindet, zwangsweise drückt. Das bedeutet, dass niemand an diesem Zweig richtig zusammenarbeiten kann, da ein Force-Push eine Umschreibung der Geschichte ist.

Wenn Sie ein Repo aufteilen, können Sie leichter nachverfolgen, welche Zweige in Arbeit sind und welche gut zu bedienen sind. Es hält das Hauptrepo sauberer.

Ihre Testinfrastruktur ist jedoch möglicherweise auf die Verwendung des Hauptrepos angewiesen, sodass es möglicherweise schwieriger ist, Änderungen an Ihrem Gabelrepo zu testen, es sei denn, Sie haben den Zweig in den Upstream verschoben. Es kann schwierig sein, herauszufinden, wann Verzweigen und Verzweigen am besten sind, aber im Allgemeinen ist Verzweigen die beste Option, wenn das Team mehr als 4 Personen hat und es viele Fehlerbehebungen und Funktionen gibt.

Rudolf Olah
quelle