Unterschied zwischen Gabel und Ast am Github

127

Wenn ich ein Projekt abspalte, das auf Github gehostet wird. Gabel ich alle Zweige? Woher weiß ich, auf welchem ​​Zweig meine Gabel basiert? Mit anderen Worten, welcher Zweig wird auf meinen PC heruntergeladen?

Jonathan.
quelle
1
Einfache englische Erklärung: Ein Zweig ist wie eine Gabel, die von einer übergeordneten Gabel stammt. Eine Gabel ist wie ein Zweig, dem ein übergeordneter Zweig fehlt.
Ken Kin

Antworten:

41

Alle Zweige auf GitHub werden in eine Abzweigung kopiert. (Dies schließt natürlich keine Zweige ein, die überhaupt nicht an GitHub gesendet wurden.)

Eine Gabelung ist jedoch eine GitHub-zu-GitHub-Operation. Es wird nichts auf Ihren PC kopiert. Es ist nicht ganz dasselbe wie ein Git- Klon . Wenn Sie fragen möchten, was kopiert wird, wenn ich ein Projekt klone, lesen Sie das Handbuch für git-clone(1).

JC Salomon
quelle
153

Denk darüber so:

Das Repo [sitory] entspricht der Zusammenarbeit des Teams in einer oder mehreren Niederlassungen. Alle Mitwirkenden haben ihre eigene Kopie davon.

Jede Gabel des Haupt-Repos entspricht der Arbeit eines Mitwirkenden. Eine Gabel ist wirklich ein Github-Konstrukt (kein Git-Konstrukt), um einen Klon des Repos in Ihrem Benutzerkonto zu speichern. Als Klon enthält er alle Zweige im Haupt-Repo zum Zeitpunkt der Herstellung der Gabel.

Jeder Zweig innerhalb der Gabel und / oder im Haupt-Repo kann verschiedenen Arten von Dingen entsprechen, je nachdem, wie Sie arbeiten möchten. Jeder Zweig kann sich auf eine Version des Projekts beziehen, kann aber auch verschiedenen Entwicklungskanälen wie Hotfixes oder experimentellen Arbeiten entsprechen.

Die Pull-Anfrage (im GitHub-Ökosystem) entspricht der Aufgabe. Jedes Mal, wenn ich eine isolierte fertige Aufgabe zum Haupt-Repo beitragen möchte, erstelle ich eine Pull-Anfrage, die den in dieser Aufgabe vorgenommenen Commits entspricht . Diese Commits werden entweder von meiner Gabel oder meinem Zweig zum Haupt-Repo gezogen .

Ein Commit ist eine Reihe von Änderungen am Code. Dies ist eines der interessantesten Dinge an Git. Sie übertragen keine Dateien, Sie übertragen Änderungsprotokolle.

Adam Grant
quelle
4
Es hat mir gefallen, wie Sie alle relevanten verwandten Bits wie die Pull-Request-Zuordnung zu Fork / Branch erklärt haben. "Sie übertragen keine Dateien, Sie übertragen Protokolle von Änderungen" ... das wusste ich bereits, aber dieser Satz ist perfekt!
Roughvchawla
2
plus eins, um zu verdeutlichen, dass die Gabel ein Github ist, kein Git. Vielen Dank!
emery.noel
10

Fork ist ein Klon auf der GitHub-Seite (er klont alles).
Wenn Sie ein Repo klonen, erhalten Sie die gesamte Geschichte dieses Repos mit all seinen Zweigen.

Obwohl Sie theoretisch den Standardzweig eines Remote-Repos ändern können , sucht ein Klon aus einem GitHub-Repo hauptsächlich nach dem Hauptzweig. Um den "Standard" -Zweig zu ändern, den ein GitHub-Klon erhält, müssen Sie den Hauptzweig umbenennen.

VonC
quelle
Wenn ich also das gegabelte Repo klone (es effektiv auf meinen PC herunterlade), befinden sich alle Zweige auf meinem PC? In einem Zweig wurden jedoch zusätzliche Dateien hinzugefügt. Wird mein PC diese Dateien haben oder nicht?
Jonathan.
1
@ Jonathan: Ihr PC erhält alle Zweige mit allen Dateien. Ihr Arbeitsverzeichnis (der Bereich, in dem Sie einen dieser Zweige auschecken) ist jedoch der einzige Bereich, in dem Sie diese Dateien sehen.
VonC
Wo werden die anderen Dateien tatsächlich im .git-Ordner gespeichert?
Jonathan.
@Jonathan: Als lose oder gepackte Objekte siehe book.git-scm.com/7_how_git_stores_objects.html (Objekte sind ein Blob (Ihre "Dateien"), ein Baum, ein Commit oder ein Tag: book.git-scm.com/ 1_the_git_object_model.html )
VonC
4

Wenn Sie ein Projekt teilen, erstellen Sie eine Kopie des gesamten Projekts in Ihrem Git-Hub-Konto. Sie kopieren nichts auf Ihren PC

Um eine Kopie auf Ihrem PC zu erstellen, müssen Sie sie klonen und alles abrufen, und Sie erhalten alle Zweige und den Code dieses Projekts

Jagd
quelle
2

Wenn Sie auf der Github-Website einen Fork eines Projekts erstellen, erhalten Sie alle Zweige aus dem Upstream-Projekt.

Wenn Sie von Ihrer neu geprägten Gabel auf Ihren lokalen PC klonen, zeigt die originFernbedienung auf Ihrem PC auf den Hauptzweig Ihrer Gabel auf Github.

bhamby
quelle
Laut der Help.GitHub-Seite Um ein Projekt zu forken , müssen Sie den upstreamZweig erstellen . und sie sagen dir, wie es geht.
JC Salomon
2
Das ist eine Fernbedienung, kein Zweig.
Arrowmaster
1

Dies kann sehr gut erklärt werden. Sie haben ein zentrales Repository bei GitHub. Immer wenn Sie einen Klon davon auf Ihrem PC verwenden, um einige Änderungen vorzunehmen, wird dieser lokale Klon des Hauptrepositorys als Fork bezeichnet.

Der Zweig ist etwas anderes und ist im Fork / Repo enthalten. Eigentlich ist die Branche Ihre Arbeit in einem anderen Entwicklungsstadium. Sie werden nach Bedarf erstellt, um eine Reihe von Funktionen zu speichern, verschiedenen Benutzern Zugriff zu gewähren, dem Client die Site zu demonstrieren usw.

Avinash Thombre
quelle
1

Ich möchte ein reales Beispiel dafür geben, wann wir Zweige und wann Gabeln verwenden

Wir haben GitLab in unserem Shop und manchmal müssen wir an Paketen aus einem Laravel-Projekt arbeiten. Normalerweise erstellen wir einen Zweig und übertragen Änderungen an dem Zweig, den wir in unserer lokalen VM-Entwicklungsumgebung getestet haben, wenn wir mit dem eigentlichen Laravel-Projekt arbeiten.

Nehmen wir an, unser Projekt befindet sich in

https://github.com/yardpenalty/mainproject.git

Filialnutzung:

Nehmen wir an, der Zweig heißt It_doesnt_matter

Sobald wir unsere Niederlassung so haben, wie wir es für die Produktion wollen, machen wir unseren letzten Druck auf diese Niederlassung und erstellen eine Zusammenführungsanforderung, die dann zum Testen an UAT gesendet wird. Sobald der Test die Qualitätskontrolle durchlaufen hat, werden die Änderungen in die Produktion zusammengeführt.

Die Zusammenführung aus dem It_doesnt_matter Zweig wird jetzt in das Masterprojekt übertragen

beim https://github.com/yardpenalty/mainproject.git

Angenommen, das Paketprojekt befindet sich unter

https://github.com/yardpenalty/mypackage.git

Beachten Sie, dass das Hauptprojekt dieses Paket in der Produktion verwendet, sodass wir keine Änderungen vornehmen können, indem wir sie (unter anderem) einfach auf dieses Paket übertragen. Angenommen, ein Webentwickler muss dieses Paket bearbeiten, um Änderungen an der Produktion vorzunehmen.

Ein einfacher Zweig funktioniert auch nicht, da wir unsere Änderungen nicht sehen können, ohne das Paket usw. zu veröffentlichen.

Gabelverwendung: Jetzt müssen wir mit unserem Paket ein wenig tricksen, damit wir über eine Gabel einen Klon des Produktionspakets erstellen. Die composer.json-Dateien können aktualisiert werden, um auf die Abzweigung zu verweisen, die sich jetzt bei a befindet Benutzer- oder Gruppenpfad befindet

Also werden wir eine Gabelung schaffen https://github.com/yardpenalty/mypackage.git

und nenne es https://github.com/yardpenalty/yards/mypackage.git

Jetzt können wir unsere Datei composer.json aktualisieren , um auf dieses Paket in unseren "Repositories" zu verweisen: [Array wie dieses und los geht's!

 {
            "type": "github",
            "url": "https://github.com/yardpenalty/yard/mypackage.git"
 }

]]

yardpenalty.com
quelle