Ich höre immer wieder Leute sagen, dass sie Code in Git geben. Git "Fork" klingt verdächtig nach Git "Clone" plus einer (bedeutungslosen) psychologischen Bereitschaft, auf zukünftige Zusammenschlüsse zu verzichten. Es gibt keinen Gabelbefehl in Git, oder?
GitHub macht Gabeln ein wenig realer, indem Korrespondenz darauf geheftet wird. Das heißt, Sie drücken die Gabel-Taste und später, wenn Sie die Pull-Anforderungs-Taste drücken, ist das System intelligent genug, um dem Eigentümer eine E-Mail zu senden. Daher ist es ein bisschen wie ein Tanz um Repository-Besitz und Berechtigungen.
Ja Nein? Haben Sie Angst, dass GitHub Git in diese Richtung erweitert? Oder Gerüchte, dass Git die Funktionalität absorbiert?
--reference
verwendet. Wie genau mit öffentlichen Repos und Löschungen umgegangen wird, ist überhaupt nicht klar (wechseln Sie die Alternativen zu zufällig ausgewählten, beworbenen Repo? Zeigen Sie alle Gabeln auf eine gemeinsame Alternative, die nicht Teil der ursprünglichen Gabel ist?), Aber die Verwendung von Alternativen erklärt verschiedene beobachtbare Verhaltensweisen.Antworten:
Fork erweitert Git im GitHub-Kontext nicht.
Es ist nur das Klonen auf der Serverseite zulässig.
Wenn Sie ein GitHub-Repository auf Ihrer lokalen Workstation klonen, können Sie nur dann einen Beitrag zum Upstream-Repository leisten, wenn Sie ausdrücklich als "Mitwirkender" deklariert sind. Das liegt daran, dass Ihr Klon eine separate Instanz dieses Projekts ist. Wenn Sie einen Beitrag zum Projekt leisten möchten, können Sie dies auf folgende Weise mit Forking tun:
Überprüfen Sie auch " Collaborative GitHub Workflow ".
Wenn Sie eine Verbindung zum ursprünglichen Repository (auch Upstream genannt) beibehalten möchten, müssen Sie eine Fernbedienung hinzufügen, die auf dieses ursprüngliche Repository verweist.
Siehe " Was ist der Unterschied zwischen Ursprung und Upstream auf GitHub? "
Und mit Git 2.20 (Q4 2018) und mehr ist das Abrufen von der Gabel mit Delta-Inseln effizienter .
quelle
"Forking" ist ein Konzept, kein Befehl, der von einem Versionskontrollsystem speziell unterstützt wird.
Die einfachste Art des Gabelns ist gleichbedeutend mit Verzweigen. Jedes Mal, wenn Sie einen Zweig erstellen, unabhängig von Ihrem VCS, haben Sie "gegabelt". Diese Gabeln lassen sich normalerweise leicht wieder zusammenführen.
Die Art von Gabelung, von der Sie sprechen, bei der eine separate Partei eine vollständige Kopie des Codes nimmt und weggeht, geschieht notwendigerweise außerhalb des VCS in einem zentralisierten System wie Subversion. Ein verteiltes VCS wie Git bietet eine viel bessere Unterstützung für das Verzweigen der gesamten Codebasis und das effektive Starten eines neuen Projekts.
Git (nicht GitHub) unterstützt nativ das "Gabeln" eines gesamten Repos (dh das Klonen) auf verschiedene Arten:
origin
für Sie erstelltorigin
EntsprechungenGit macht es einfach, Änderungen an der Quelle des Forks zurückzugeben, indem Sie jemanden aus dem ursprünglichen Projekt bitten, von Ihnen zu ziehen, oder Schreibzugriff anfordern, um Änderungen selbst zurückzuschieben. Dies ist der Teil, den GitHub einfacher macht und standardisiert.
Es gibt keine Angst, weil Ihre Annahme falsch ist. GitHub "erweitert" die Forking-Funktionalität von Git mit einer schönen GUI und einer standardisierten Methode zum Ausgeben von Pull-Anfragen, fügt Git jedoch nicht die Funktionalität hinzu. Das Konzept des Full-Repo-Forkings ist auf einer fundamentalen Ebene direkt in die verteilte Versionskontrolle eingebunden. Sie können GitHub jederzeit verlassen und weiterhin Projekte pushen / ziehen, die Sie "gegabelt" haben.
quelle
X project
auf meinen Computer klonen . Wenn ich Änderungen in meinem lokalen Bereich vornehme und keinen Schreibzugriff auf den Ursprung habe, sende ich dem Autor des Projekts eine E-Mail, um einen Pull anzufordern. Er wird eine Fernbedienung namens Gideon erstellen, die eine URL zu meinem lokalen Klon sein wird, und er kann ziehen, richtig?Ja, Gabel ist ein Klon. Es ist entstanden, weil Sie nicht ohne deren Erlaubnis auf die Kopien anderer pushen können . Sie machen eine Kopie davon für Sie ( Gabel ), wo Sie auch eine Schreibgenehmigung haben.
Wenn der tatsächliche Eigentümer oder andere Benutzer mit einer Verzweigung Ihre Änderungen mögen, können sie diese in Zukunft in ihr eigenes Repository zurückziehen. Alternativ können Sie ihnen eine "Pull-Anfrage" senden.
quelle
fork
bedeutet, dass sich auf dem GitHub-Server eine Kopie Ihrer Arbeit befindet, auf die Siepush
zugreifen können und auf die andere URL-Zugriff haben, damit sie dies könnenpull
. Diespull request
ist nur eine Standardmethode, um die URL für Ihre Kopie (auf GitHub) zu ihnen zu bringen, damit sie sie einfach in ihr Repository ziehen können."Gabel" bedeutet in diesem Zusammenhang "Kopie des Codes erstellen, damit ich meine eigenen Änderungen hinzufügen kann". Sonst gibt es nicht viel zu sagen. Jeder Klon ist im Wesentlichen eine Gabel, und es ist Sache des Originals, zu entscheiden, ob die Änderungen von der Gabel gezogen werden sollen.
quelle
on the GitHub server
damit ich meine eigenen Änderungen hinzufügen kannand others can have URL access to my version
". Die meisten lokalen Workstations bieten keinen URL-Zugriff, damit jemand darauf zugreifen kann. Wenn Sie jedoch auf dem Server auf Ihre Abzweigung drücken, können diese die URL für den Pull haben.Beim Klonen wird eine Kopie des Git-Repositorys auf einen lokalen Computer erstellt, während beim Forken das Repository in ein anderes Repository geklont wird. Das Klonen ist nur für den persönlichen Gebrauch bestimmt (obwohl zukünftige Zusammenführungen auftreten können), aber mit Forking kopieren Sie und öffnen einen neuen möglichen Projektpfad
quelle
Das Gabeln erfolgt, wenn Sie sich entscheiden, zu einem Projekt beizutragen. Sie würden eine Kopie des gesamten Projekts zusammen mit den Verlaufsprotokollen erstellen. Diese Kopie wird vollständig in Ihrem Repository erstellt. Sobald Sie diese Änderungen vorgenommen haben, geben Sie eine Pull-Anforderung aus. Jetzt ist es Sache des Eigentümers der Quelle, Ihre Pull-Anfrage zu akzeptieren und die Änderungen in den Originalcode aufzunehmen.
Git-Klon ist ein tatsächlicher Befehl, mit dem Benutzer eine Kopie der Quelle erhalten können. Git-Klon [URL] Hiermit sollte eine Kopie von [URL] in Ihrem eigenen lokalen Repository erstellt werden.
quelle
Ich denke, Fork ist eine Kopie eines anderen Repositorys, aber mit Ihrer Kontoänderung. Wenn Sie beispielsweise ein anderes Repository direkt lokal klonen, verwendet der Remote-Objektursprung weiterhin das Konto, von dem Sie klonen. Sie können Ihren Code nicht festschreiben und beitragen. Es ist nur eine reine Kopie von Codes. Andernfalls klont das Repository, wenn Sie ein Repository aufteilen, mit der Aktualisierung Ihrer Kontoeinstellung in Ihrem Github-Konto. Wenn Sie dann das Repo im Kontext Ihres Kontos klonen, können Sie Ihre Codes festschreiben.
quelle
Hier gibt es ein Missverständnis darüber, was eine "Gabel" ist. Eine Gabelung ist in der Tat nichts anderes als eine Reihe von Zweigen pro Benutzer. Wenn Sie zu einem Fork pushen, pushen Sie tatsächlich zum ursprünglichen Repository, da dies das EINZIGE Repository ist.
Sie können dies ausprobieren, indem Sie auf einen Fork drücken, das Commit notieren und dann zum ursprünglichen Repository wechseln und die Commit-ID verwenden. Sie werden feststellen, dass sich das Commit "im" ursprünglichen Repository befindet.
Das macht sehr viel Sinn, ist aber alles andere als offensichtlich (ich habe dies erst kürzlich zufällig entdeckt).
Wenn John das Repository SuperProject teilt, scheint es tatsächlich so zu sein, dass alle Zweige im Quell-Repository mit einem Namen wie "John.master", "John.new_gui_project" usw. repliziert werden.
GitHub "versteckt" den "John". von uns und gibt uns die Illusion, wir hätten unsere eigene "Kopie" des Repositorys auf GitHub, aber wir tun es nicht und es wird auch keine benötigt.
Der Zweig meiner Gabel "master" heißt also eigentlich "Korporal.master", aber die GitHub-Benutzeroberfläche zeigt dies nie und zeigt mir nur "master".
Das ist so ziemlich das, was ich denke, geht sowieso unter der Haube vor, basierend auf Sachen, die ich in letzter Zeit gemacht habe, und wenn man darüber nachdenkt, ist es sehr gutes Design.
Aus diesem Grund denke ich, dass es für Microsoft sehr einfach wäre, Git-Gabeln in ihrem Visual Studio Team Services-Angebot zu implementieren.
quelle
git clone
jedes Mal, wenn jemand den "Gabel" -Knopf drückt , buchstäblich ein ganz neues Repository (sogar ein "nacktes") zu erstellen - das wäre eine unglaubliche Verschwendung von Speicher und wahrscheinlich auch ein Angriffsvektor .Abgesehen von der Tatsache, dass das Klonen vom Server auf Ihren Computer erfolgt und das Forking eine Kopie auf dem Server selbst erstellt, besteht ein wichtiger Unterschied darin, dass wir beim Klonen tatsächlich alle Zweige, Beschriftungen usw. erhalten.
Aber wenn wir uns teilen, bekommen wir tatsächlich nur die aktuellen Dateien im Hauptzweig, nichts anderes. Dies bedeutet, dass wir die anderen Zweige usw. nicht bekommen.
Wenn Sie also etwas wieder mit dem ursprünglichen Repository zusammenführen müssen, handelt es sich um eine Zusammenführung zwischen Repositorys, für die auf jeden Fall höhere Berechtigungen erforderlich sind.
Fork ist kein Befehl in Git; Es ist nur ein Konzept, das GitHub implementiert. Denken Sie daran, dass Git für die Arbeit in einer Peer-to-Peer-Umgebung entwickelt wurde, ohne dass Inhalte mit einer Masterkopie synchronisiert werden müssen. Der Server ist nur ein weiterer Peer, aber wir betrachten ihn als Masterkopie.
quelle
git branch -a
.In einfachsten Worten,
Wenn Sie sagen, dass Sie ein Repository forken , erstellen Sie im Grunde genommen eine Kopie des ursprünglichen Repositorys unter Ihrer GitHub-ID in Ihrem GitHub-Konto.
und
Wenn Sie sagen, dass Sie ein Repository klonen , erstellen Sie direkt eine lokale Kopie des ursprünglichen Repositorys in Ihrem System (PC / Laptop), ohne eine Kopie in Ihrem GitHub-Konto zu haben.
quelle