ebody: Was ist der Unterschied zwischen Branch, Fork und Clone bei Github?

Hallo,

ich fange gerade an mich mit GitHub zu beschäftigen und mir ist noch nicht so 100% klar, was der Unterschied zwischen Branch, Fork und Clone ist.

Zur Info: Ich mache für den Anfang erstmal alles über die Webseite von GitHub, ich verwenden keine Konsole und auch nicht GitHub Desktop.

Ich habe ein paar Anfänger Tutorials gemacht und habe es bisher so verstanden, dass man bei eigenen Projekten einen Branch vom Master erstellen muss, damit die Masterdateien nicht ohne Genehmigung verändert werden können.

Wenn ich an einem fremden Projekt mitwirken möchte, muss ich es "forken". Dann kann ich es runterladen und es ist das gleiche wie Klonen?

Erst wenn man ein Projekt "geforked" hat, kann man Dateien die man runtergeladen und bearbeitet hat auch hochladen ("committen") und diese als Änderungs Vorschlag (Pull request) einreichen.

  • Eigenes Projekt bearbeiten: Branch erstellen
  • Fremdes Projekt bearbeiten: Forken

Habe ich das so einigermaßen richtig oder falsch verstanden? Wenn falsch, was habe ich falsch verstanden?

Gruß ebody

  1. Hallo ebody,

    ich fange gerade an mich mit GitHub zu beschäftigen und mir ist noch nicht so 100% klar, was der Unterschied zwischen Branch, Fork und Clone ist.

    Es sind unterschiedliche Dinge 😉

    Ein Branch ist ein Abzweig in der Versionskontrolle. Du erstellst einen Branch und kannst dort an deinen Dateien arbeiten und mit jedem commit entfernt sich der Branch von dem Hauptzweig.

    Ursprünglich hat man einen Branch angelegt, wenn man eine Version der Software released hat, etwa damit man bei etwaigen Bugfixes auf dem Stand weitermachen konnte, die die Software hatte, als man die entsprechende Version herausgebracht hat.

    Heute nutzt man Branches sehr viel freizügiger, zum Beispiel in Form von Feature-Branches. Man möchte ein Feature entwickeln, dass ggfls eine Zeit braucht, und macht deshalb einen Branch vom Hauptzweig und entwickelt dort weiter. So kollidiert man nicht mit der Tagesarbeit im Master-Branch. Wenn das Feature fertig ist, wird der Branch in dem Master gemerged.

    Ein Fork nennt Github den Vorgang, wenn du eine Kopie des Repositories unter deinem eigenen User-Account erstellst. Du könntest z.B. hier den Fork-Button drücken und hättest dann eine Kopie des CForum-Repositories unter deinem eigenen User-Account, an dem du unabhängig von mir arbeiten könntest.

    Clone nennt Git (und Github) den Vorgang, eine lokale Arbeitskopie des Repositories zu erstellen. Du kannst dann dort Änderungen vornehmen und commiten. Dann kannst du sie mit git push in das Repository auf dem Github-Server hochladen. Mit git pull könntest du etwaige Änderungen, die du z.B. von einem anderen Computer aus gemacht hast, auch wieder herunterladen.

    Clonen kannst du allerdings jedes Repository, nicht nur deine eigenen.

    Wenn ich an einem fremden Projekt mitwirken möchte, muss ich es "forken". Dann kann ich es runterladen und es ist das gleiche wie Klonen?

    Mit clone ist ganz spezifisch der Vorgang gemeint, mit dem man eine lokale Arbeitskopie des Repositories anlegt, also git clone.

    Erst wenn man ein Projekt "geforked" hat, kann man Dateien die man runtergeladen und bearbeitet hat auch hochladen ("committen") und diese als Änderungs Vorschlag (Pull request) einreichen.

    Der commit ist lokal, das hochladen heisst push.

    Habe ich das so einigermaßen richtig oder falsch verstanden? Wenn falsch, was habe ich falsch verstanden?

    Ich hoffe, ich hab deine Verwirrung etwas lüften können.

    Freundliche Grüße,
    Christian Kruse

    1. @@Christian Kruse

      Einiges von dem von CK Gesagtem findest du in diesem Diagramm wieder. (Folie 5 von git vs. svn)

      LLAP 🖖

      --
      „Man kann sich halt nicht sicher sein“, sagt der Mann auf der Straße, „dass in einer Gruppe Flüchtlinge nicht auch Arschlöcher sind.“
      „Stimmt wohl“, sagt das Känguru, „aber immerhin kann man sich sicher sein, dass in einer Gruppe Rassisten nur Arschlöcher sind.“

      —Marc-Uwe Kling
  2. Tach!

    ich fange gerade an mich mit GitHub zu beschäftigen und mir ist noch nicht so 100% klar, was der Unterschied zwischen Branch, Fork und Clone ist.

    Also nicht nur mit GitHub sondern auch mit Git. Dazu wäre neben den Erläuterungen der angefragten Begriffe noch zu sagen, dass GitHub nur ein Hoster für mit Git verwaltete Projekte ist. Wenn du nicht vorhast, ein öffentliches Repository zu erstellen, oder die Dienstleistungen für private Repositorys in Anspruch zu nehmen, kannst du Git auch ohne GitHub verwenden. Du solltest also unterscheiden, was ein Leistungsmerkmal von Git ist, und welche Funktionalität zusätzlich von GitHub angeboten wird.

    Ich habe ein paar Anfänger Tutorials gemacht und habe es bisher so verstanden, dass man bei eigenen Projekten einen Branch vom Master erstellen muss, damit die Masterdateien nicht ohne Genehmigung verändert werden können.

    Bei eigenen Projekten hast du damit keine Not. Branchen kann man in eigenen Projekten nach Lust und Laune. Auch in Clonen von anderen Projekten kann man im Prinzip beliebig branchen oder im Hauptzweig arbeiten. Wenn man allerdings Updates des geclonten Repositorys bekommen möchte, nimmt man das besser als Submodule ins eigene Projekt. Beim Mitarbeiten kommt es darauf an, ob man die GitHub-Gegebenheiten berücksichtigen muss, oder nicht.

    Wenn ich an einem fremden Projekt mitwirken möchte, muss ich es "forken".

    Nur wenn es ein GitHub-Repository ist, und du noch nicht soweit involviert bist, Schreibrechte für das Repo zu bekommen, aber gern deine Änderungen vorstellen möchtest. Ansonsten ist ein Forken nicht notwendig, und bei anderswo gehosteten Repositorys auch nicht unbedingt vorhanden.

    Dann kann ich es runterladen und es ist das gleiche wie Klonen?

    Git arbeitet ja dezentral, und jede Kopie eines Repositorys ist ein Clone. Wenn du also ein GitHub-Repository forkst und dann eine lokale Kopie erstellen möchtest, dann ist das ein Clone deines Forks. Man muss auch nicht separat herunterladen, denn das ist beim Clonen inbegriffen, wenn man ein irgendwo (also auch bei GitHub) gehostetes Repository als Quelle für den Clone-Vorgang angibt.

    Erst wenn man ein Projekt "geforked" hat, kann man Dateien die man runtergeladen und bearbeitet hat auch hochladen ("committen") und diese als Änderungs Vorschlag (Pull request) einreichen.

    Ja, man braucht Schreibrechte, um Pushen zu können. Die hast du bei deinem Fork, kannst sie aber auch für das eigentliche Repository bekommen.

    • Eigenes Projekt bearbeiten: Branch erstellen
    • Fremdes Projekt bearbeiten: Forken

    Eigene Projekte kannst du beliebig bearbeiten, einen Branch brauchst du dafür nicht notwendigerweise.

    dedlfix.

    1. Hallo und vielen Dank an alle für die Infos.

      Ich bin gerade dabei einfach mal die Abläufe mit 2 GitHub Konten durch zu spielen/testen.

      Ich nutze bisher nur die GitHub Seite, lade Dateien runter und bearbeite sie und lade sie über die GitHub Oberfläche wieder hoch oder bearbeite die Datei direkt auf der GitHub Seite. Ich nutze also kein Git. Das nur als Hintergrund Info, um mögliche Missverständnisse zu vermeiden.

      1. Ich habe ein Test Projekt (Repository) erstellt: https://github.com/ebody/test/

      2. Mit einem anderen Konto habe ich das Projekt "geforked": https://github.com/drHippert/test

      3. Dann mit dem Konto "ebody" (Projekt Inhaber) in die readme Datei einen Satz eingefügt.

      4. Danach im "geforkden" Projekt ebenfalls einen Satz in die readme Datei eingefügt und vorgeschlagen diese Änderung in das Projekt https://github.com/ebody/test/ in den Zweig "master" aufzunehmen.

      Schaue ich mir als Inhaber ("ebody") diese Anfrage an https://github.com/ebody/test/pull/1 steht dort:

      Klicke ich auf den Button "Resolve conflicts" erscheint:

      Der Konflikt entsteht, weil ich meine Änderung an das fremde Projekt einreiche, welches sich aber in der Zwischenzeit schon wieder verändert hat?

      Als Projekt Inhaber möchte ich die Änderung übernehmen und müsste dann aber die Datei so anpassen, das alles wieder in der richtigen Reihenfolge steht etc?

      Bei so einer kleinen Änderung und einem Test Projekt ist das ja recht einfach und übersichtlich, aber wenn ich mir vorstelle eine Datei besteht aus 1000 Zeilen Code und man muss dann alles zusammen bringen, das kann doch auch schnell zu Fehlern führen und ist sehr Zeitaufwendig.

      Und soweit ich es verstanden habe, soll Git oder in dem Fall GitHub ja alles vereinfachen und übersichtlich halten.

      Wäre der Ablauf falsch oder teilweise falsch oder ist es einfach so, dass man die vorgeschlagenen Änderungen dann mühsam in die bestehende Datei einpflegen muss?

      Gruß ebody

  3. Dieser Beitrag wurde gelöscht: Beitrag ist Spam.