it-swarm.com.de

Gabelung vs. Verzweigung in GitHub

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

Mit Forking wird meine Version des Projekts vom ursprünglichen isoliert, da ich nicht auf der Liste der Mitbearbeiter des ursprünglichen Projekts stehen muss. Da wir ein Projekt inhouse entwickeln, ist es kein Problem, Mitarbeiter als Mitarbeiter hinzuzufügen. Wir möchten jedoch gerne verstehen, ob durch das Aufteilen eines Projekts Änderungen der Zusammenführung zum Hauptprojekt schwieriger werden. Das heißt, ich frage mich, ob das Verzweigen die Synchronisierung der beiden Projekte erleichtert. Ist es also einfacher, Änderungen zwischen meiner Version des Hauptprojekts und dem Hauptprojekt zusammenzuführen und zu verschieben, wenn ich verzweige? 

234
reprogrammer

Sie können nicht immer eine Verzweigung erstellen oder eine vorhandene Verzweigung ziehen und darauf zurückgreifen, da Sie nicht als Mitarbeiter für ein bestimmtes Projekt registriert sind.

Gabelung ist nichts weiter als ein Klon auf der GitHub-Serverseite:

  • ohne die Möglichkeit direkt zurückzuschieben
  • mit Fork Warteschlange Feature hinzugefügt, um die Zusammenführungsanforderung zu verwalten

Sie halten eine Gabelung synchron mit dem ursprünglichen Projekt, indem Sie:

  • hinzufügen des Originalprojekts als Fernbedienung
  • regelmäßig von diesem ursprünglichen Projekt abrufen
  • Überdenken Sie Ihre aktuelle Entwicklung zusätzlich zu der Branche, die Sie mit diesem Abruf aktualisiert haben.

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

Das Ziel ist wirklich, Zusammenarbeit zu ermöglichen, obwohl direkte Teilnahme nicht immer möglich ist.


Die Tatsache, dass Sie auf der GitHub-Seite klonen, bedeutet, dass Sie jetzt zwei "zentrales" Repository haben ("zentral" als "von mehreren Mitarbeitern sichtbar").
Wenn Sie sie direkt als Mitbearbeiter für one project hinzufügen können, müssen Sie keinen weiteren mit einer Verzweigung verwalten. 

fork on GitHub

Das Zusammenführungserlebnis wäre ungefähr gleich, aber mit einem zusätzlichen Grad an Indirektion (Drücken Sie zuerst auf die Gabel, dann fragen Sie nach einem Zug, mit der Gefahr einer Entwicklung des Original-Repos, wodurch Ihre Schnellvorlauf-Merges nicht mehr schnell vorwärts gehen). .
Das heißt, der korrekte Arbeitsablauf besteht darin, git pull --rebase upstream (Ihre Arbeit zusätzlich zu neuen Commits aus dem Upstream-Bereich abzugrenzen) und dann git Push --force Origin, um die Historie so umzuschreiben, dass Ihre eigenen Commits immer auf den Commits des Commits stehen ursprüngliches (Upstream) Repo.

Siehe auch:

243
VonC

Hier sind die Hauptunterschiede:

Gabelung

Pros

  • Hält Zweige nach Benutzer getrennt
  • Reduziert das Durcheinander im primären Repository
  • Ihr Teamprozess spiegelt den externen Mitarbeiterprozess wider

Cons

  • Schwieriger, alle Zweige zu sehen, die aktiv (oder inaktiv sind).
  • Die Zusammenarbeit in einem Zweig ist komplizierter (der Gabelbesitzer muss die Person als Mitarbeiter hinzufügen)
  • Sie müssen das Konzept mehrerer Fernbedienungen in Git verstehen
    • Erfordert zusätzliche mentale Buchhaltung
    • Dies macht den Workflow für Leute schwieriger, die sich mit Git nicht besonders wohl fühlen

Verzweigung

Pros

  • Hält alle Arbeiten rund um ein Projekt an einem Ort
  • Alle Mitarbeiter können auf dieselbe Zweigstelle zugreifen, um daran zu arbeiten
  • Es gibt nur eine einzige Git-Fernbedienung

Cons

  • Niederlassungen, die aufgegeben werden, können sich leichter stauen
  • Ihr Teambeitragsprozess stimmt nicht mit dem externen Mitarbeiterprozess überein
  • Sie müssen Teammitglieder als Mitwirkende hinzufügen, bevor sie verzweigen können
55
Aidan Feldman

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

Das allgemeine Muster sieht wie folgt aus:

  • Fassen Sie das Repository des ursprünglichen Projekts zusammen, um Ihre eigene GitHub-Kopie zu erhalten, auf die Sie dann Änderungen verschieben 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 Modifikationen und Ihre eigenen Verpflichtungen vor Ort vor.
  • Übertragen Sie Ihre Änderungen in Ihr GitHub-Repository (da Sie normalerweise keine Schreibberechtigungen für das Projekt-Repository haben).
  • Wenden Sie sich an die Betreuer des Projekts, und fordern Sie sie auf, Ihre Änderungen abzurufen und zu überprüfen/zusammenzuführen. Lassen Sie sie zum Projekt-Repository zurückschieben (wenn Sie und sie möchten).

Ohne dies ist es für öffentliche Projekte ziemlich ungewöhnlich, dass jemand seine eigenen Verpflichtungen direkt pushen lässt.

43
Bruno

Forking erstellt ein komplett neues Repository aus dem vorhandenen Repository (einfach git clone für gitHub/bitbucket) 

Gabeln werden am besten verwendet: Wenn das Ziel der Aufteilung besteht, ein logisch unabhängiges Projekt zu erstellen, das möglicherweise niemals mit seinem übergeordneten Element zusammengeführt wird.

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

Verzweigungen werden am besten verwendet: Wenn sie als temporäre Orte erstellt werden, um ein Feature zu bearbeiten, mit der Absicht, die Verzweigung mit dem Ursprung zu verbinden.

Spezifischer: - In Open Source-Projekten entscheidet der Eigentümer des Repositorys, wer in das Repository pushen kann. Die Idee von Open Source ist jedoch, dass jeder zum Projekt beitragen kann.

Dieses Problem wird durch forks gelöst: Jedes Mal, wenn ein Entwickler etwas an einem Open Source-Projekt ändern möchte, wird das offizielle Repository nicht direkt geklont. Stattdessen verzweigen sie ihn, um eine Kopie zu erstellen. Wenn die Arbeit abgeschlossen ist, stellen 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.

Die Gabelung ähnelt im Wesentlichen der Verzweigung von Features. Anstatt jedoch Verzweigungen zu erstellen, wird eine Verzweigung des Repositorys vorgenommen. Statt einer Zusammenführungsanforderung erstellen Sie eine Pull-Anforderung.

Die folgenden Links geben den Unterschied auf eine gut erläuterte Weise an:

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

0
srinivas y