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

Beitrag lesen

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