Forking vs. Branching in GitHub

Ich würde gerne mehr über die Vor- und Nachteile des Forking eines Github-Projekts erfahren, anstatt einen Zweig eines Github-Projekts zu erstellen.

Forking macht meine Version des Projekts isolierter, weil ich nicht auf der Kollaborateursliste des ursprünglichen Projekts stehen muss. Da wir ein Projekt intern entwickeln, ist es kein Problem, Menschen als Mitarbeiter hinzuzufügen. Aber wir würden gerne verstehen, ob das Forken eines Projekts die Zusammenführung von Änderungen zurück zum Hauptprojekt erschweren würde. Das heißt, ich frage mich, ob die Verzweigung die Synchronisierung der beiden Projekte erleichtert. Mit anderen Worten, ist es einfacher, Änderungen zwischen meiner Version des Hauptprojekts und dem Hauptprojekt zusammenzuführen und zu verschieben, wenn ich mich verzweige?

Sie können nicht immer eine Verzweigung erstellen oder eine vorhandene Verzweigung ziehen und zu dieser zurückkehren, da Sie nicht als Mitarbeiter für das jeweilige Projekt registriert sind.

Forking ist nichts anderes als ein Klon auf der GitHub-Serverseite :

  • ohne die Möglichkeit, direkt zurückzuschlagen
  • Mit der function für die Gabelwarteschlange wurde hinzugefügt, um die Zusammenführungsanforderung zu verwalten

Sie halten eine Abzweigung synchron zum ursprünglichen Projekt:

  • Hinzufügen des ursprünglichen Projekts als Remote
  • regelmäßiges Holen von diesem ursprünglichen Projekt
  • Rebase Ihre aktuelle Entwicklung auf der Zweigstelle von Interesse, die Sie von diesem Abruf aktualisiert haben.

Mit der Rebase können Sie sicherstellen, dass Ihre Änderungen unkompliziert sind (kein Zusammenführungskonflikt). Dadurch wird Ihre Pull-Anfrage einfacher, wenn der Betreuer des ursprünglichen Projekts Ihre Patches in sein Projekt aufnehmen soll.

Ziel ist es, Kollaboration zu ermöglichen, obwohl direkte Beteiligung nicht immer möglich ist.


Die Tatsache, dass Sie auf der GitHub-Seite klonen, bedeutet, dass Sie jetzt zwei “zentrale” Repositories haben (“zentral” als “sichtbar von mehreren Mitarbeitern”).
Wenn Sie sie direkt als Kollaborator für ein Projekt hinzufügen können, müssen Sie kein anderes mit einem Fork verwalten.

Gabel auf GitHub

Die Merge-Erfahrung wäre ungefähr die gleiche, aber mit einem zusätzlichen Grad an Indirektion (zuerst auf die Gabelung drücken, dann nach einem Pull fragen, mit dem Risiko von Entwicklungen auf dem ursprünglichen Repo, was deine Fast-Forward-Merges nicht mehr beschleunigt) .
Das bedeutet, der korrekte Workflow besteht darin, git pull --rebase upstream (rebase deine Arbeit auf neue commits von upstream) und git push --force origin , um den Verlauf so neu zu schreiben, dass deine eigenen Commits immer sind zusätzlich zu den Commits aus dem ursprünglichen (Upstream-) Repo.

Siehe auch:

  • Git Fork ist Git Klon?
  • Ziehen Sie neue Updates vom ursprünglichen Github-Repository in das gegabelte Github-Repository

Hier sind die High-Level-Unterschiede:

Gabelung

Pros

  • Hält Zweige getrennt vom Benutzer
  • Reduziert Unordnung im primären Repository
  • Ihr Teamprozess spiegelt den externen Beitragsprozess wider

Nachteile

  • Es wird schwieriger, alle Zweige zu sehen, die aktiv sind (oder inaktiv sind)
  • Die Zusammenarbeit in einem Zweig ist komplizierter (der Besitzer des Forks muss die Person als Mitarbeiter hinzufügen)
  • Sie müssen das Konzept mehrerer Fernbedienungen in Git verstehen
    • Benötigt zusätzliche mentale Buchhaltung
    • Dies wird den Arbeitsablauf für Leute, die sich nicht gut mit Git auskennen, erschweren

Verzweigung

Pros

  • Hält die gesamte Arbeit, die an einem Projekt geleistet wird, an einem Ort
  • Alle Mitarbeiter können zur selben Branche wechseln, um daran mitzuarbeiten
  • Es gibt nur eine Git-Fernbedienung, mit der man umgehen kann

Nachteile

  • Zweige, die aufgegeben werden, können sich leichter stapeln
  • Ihr Teambeitragsprozess stimmt nicht mit dem externen Beitragendenprozess überein
  • Sie müssen Teammitglieder als Mitwirkende hinzufügen, bevor sie verzweigen können

Es hat mit dem allgemeinen Workflow von Git zu tun. Es ist unwahrscheinlich, dass Sie direkt zum Repository des Hauptprojekts wechseln können. Ich bin mir nicht sicher, ob das Repository des GitHub-Projekts die branchbasierte Zugriffssteuerung unterstützt, da Sie beispielsweise niemandem die Berechtigung erteilen möchten, zum Master-Zweig zu gelangen.

Das allgemeine Muster ist wie folgt:

  • Führen Sie das Repository des ursprünglichen Projekts mit einer eigenen GitHub-Kopie aus, auf die Sie dann Änderungen übertragen können.
  • Klonen Sie Ihr GitHub-Repository auf Ihren lokalen Rechner
  • Fügen Sie optional das ursprüngliche Repository als zusätzliches Remote-Repository in Ihrem lokalen Repository hinzu. Sie können dann die in diesem Repository veröffentlichten Änderungen direkt abrufen.
  • Nehmen Sie Ihre Änderungen und Ihre eigenen Commits vor Ort vor.
  • Übertragen Sie Ihre Änderungen an Ihr GitHub-Repository (da Sie normalerweise nicht direkt Schreibrechte für das Projekt-Repository haben).
  • Wenden Sie sich an die Projektbetreuer und bitten Sie sie, Ihre Änderungen abzurufen und zu überprüfen / zusammenzuführen, und lassen Sie sie zurück in das Projekt-Repository verschieben (wenn Sie und sie es möchten).

Ohne dies ist es für öffentliche Projekte ziemlich ungewöhnlich, dass jemand seine eigenen Commits direkt anstoßen lässt.

Forking erstellt ein komplett neues Repository aus dem vorhandenen Repository (einfach Git Clone auf GitHub / Bitbucket tun)

Gabeln werden am besten verwendet: wenn die Absicht des “Splits” darin besteht, ein logisch unabhängiges Projekt zu schaffen, das sich nie mit seinem Elternteil wiedervereint.

Branch-Strategie erstellt einen neuen Zweig über das vorhandene / Arbeits-Repository

Zweige werden am besten verwendet: wenn sie als vorübergehende Orte zum Bearbeiten eines Features erstellt werden, mit der Absicht, den Zweig mit dem Ursprung zusammenzuführen.

Spezifischer: – In Open-Source-Projekten entscheidet der Eigentümer des Repositorys, wer an das Repository gelangen darf. Die Idee von Open Source ist jedoch, dass jeder zu dem Projekt beitragen kann.

Dieses Problem wird durch Forks getriggers: Jedes Mal, wenn ein Entwickler etwas in einem Open-Source-Projekt ändern möchte, klonen sie das offizielle Repository nicht direkt. Stattdessen teilen sie es aus, um eine Kopie zu erstellen. Wenn die Arbeit abgeschlossen ist, machen sie eine Pull-Anforderung, damit der Eigentümer des Repositorys die Änderungen überprüfen und entscheiden kann, ob sie mit seinem Projekt zusammengeführt werden sollen.

Im core ist das Forking ähnlich dem Feature-Branching, aber anstatt Verzweigungen zu erstellen, wird ein Fork des Repository erstellt, und statt eine Zusammenführungs-Anfrage zu erstellen, erstellen Sie eine Pull-Anfrage.

Die folgenden Links bieten den Unterschied in einer gut erklärten Weise:

https://blog.gitprime.com/the-definitive-guide-to-forks-and-branches-in-git/

https://buddy.works/blog/5-types-of-git-workflows

http://www.continuousagile.com/unblock/branching.html