So konvertieren Sie einen schreibgeschützten Git-Klon von Github in einen gegabelten

79

Von Zeit zu Zeit stoße ich auf dieses Problem.

Nehmen wir an, ich habe Folgendes getan, um den Quellcode von Rails zu lesen, da ich auf einige Probleme stoße.

git clone git://github.com/rails/rails.git

Während der Recherche habe ich etwas getestet und jetzt habe ich eine Lösung, die ich mir im Rails-Kernteam ansehen möchte. Wie schiebe ich meine Änderungen auf eine gespaltene Version von Schienen.

Denken Sie daran, dass ich beim Klonen keine gegabelte Version geklont habe, sondern eine schreibgeschützte Version.

Es ist nicht so, dass ich gegen das Gabeln bin. Es ist nur so, dass ich manchmal denke, ich werde nur stöbern, dann möchte ich etwas hinzufügen.

Nick Vanderbilt
quelle
Ich möchte einchecken und sehen, ob meine Antwort für Sie funktioniert oder ob Sie noch weitere Informationen benötigen. Wenn Sie weitere Erklärungen oder Erläuterungen benötigen, lassen Sie es mich wissen, und ich kann versuchen, Ihnen zu helfen. Wenn nicht, möchten Sie möglicherweise eine Antwort akzeptieren, um anzuzeigen, dass die Frage angemessen beantwortet wurde.
Brian Campbell

Antworten:

112

Wenn Sie ein Repo klonen, wird automatisch eine Fernbedienung namens aufgerufen, origindie sich auf das von Ihnen geklonte Repo bezieht. Dies zeigt jetzt auf das Upstream-Rails-Projekt. Sie müssen jedoch eine eigene Gabel erstellen, auf die Sie drücken können, und dann eine Fernbedienung einrichten, die dort zeigt, damit Sie darauf drücken können.

Der erste Schritt besteht darin, auf der vorgelagerten GitHub-Projektseite auf die Schaltfläche "Gabel" zu klicken (Bild aus den GitHub-Anweisungen zum Gabeln ):

GitHub Gabelknopf

Sobald Sie dies getan haben, suchen und kopieren Sie die URL für dieses Repo. Stellen Sie sicher, dass Sie die SSH-URL verwenden, die Lese- und Schreibzugriff hat. Es sollte ungefähr so ​​sein [email protected]:nadal/rails.git, vorausgesetzt, Ihr Benutzername ist nadal.

Jetzt können Sie die Fernbedienung erstellen, mit der Git je nach Zugriff auf ein Remote-Repository den Überblick behalten, von diesem abrufen oder darauf zugreifen kann. Sie können entweder durch origindiejenige ersetzen, auf die Sie pushen (dh wie viele Personen haben sie eingerichtet), oder originauf den Upstream zeigen und stattdessen eine neue Fernbedienung erstellen. Ich werde zeigen, wie das erste Setup durchgeführt wird. Der zweite sollte leicht herauszufinden sein.

Um zu ändern origin, um auf Ihre Gabelung auf GitHub zu verweisen, möchten Sie wahrscheinlich den Upstream-Zweig irgendwo behalten, also benennen Sie ihn um in upstream:

git remote rename origin upstream

Erstellen Sie nun eine neue Fernbedienung, die auf Ihre Gabel zeigt:

git remote add -f origin [email protected]:nadal/rails.git

Und jetzt sollten Sie in der Lage sein, auf Ihre neue Gabel zu schieben:

git push origin master

Sobald Sie mit den Änderungen, die Sie an GitHub vorgenommen haben, zufrieden sind und möchten, dass sich jemand aus dem Rails-Team diese ansieht, haben Sie zwei Möglichkeiten. Eine besteht darin , eine Pull-Anfrage mit GitHub zu senden . Informationen dazu finden Sie in den dortigen Dokumenten. Wenn Sie jedoch nur einen oder mehrere kleine Patches haben, würde das Rails-Team es vorziehen, dass Sie ein Lighthouse-Ticket erstellen und Ihren Patch anhängen. Weitere Informationen finden Sie in den Anweisungen zum Beitrag zu Rails .

Bearbeiten Hier ist ein Diagramm, um anzuzeigen, was los ist. Was Sie getan haben, ist einfach das Upstream-Rails-Repo zu klonen. so jetzt können Sie Ihre eigene Repo auf Ihrem eigenen Rechner haben, die sich bezieht , git://github.com/rails/rails.gitwie origin:

Github: git: //github.com/rails/rails.git
                    ^
                    |
Fernbedienungen: Herkunft
                    |
Ihre Maschine: Schienen /

Folgendes erhalten Sie, wenn Sie Ihre Gabel gegabelt und dann geklont haben:

Github: git: //github.com/rails/rails.git <- [email protected]: nadal / rails.git
                                                           ^
                                                           |
Fernbedienungen: Herkunft
                                                           |
Ihre Maschine: Schienen /

Wenn Sie meinen Anweisungen folgen, erhalten Sie Folgendes:

Github: git: //github.com/rails/rails.git <- [email protected]: nadal / rails.git
                        ^^
                        | |
Fernbedienungen: vorgelagerter Ursprung
                        | |
Ihre Maschine: \ ------------------------------- Rails /

Dies entspricht genau der Version, die Sie durch Forking erhalten, mit der Ausnahme, dass es auch eine upstreamFernbedienung gibt, mit der Sie offizielle Änderungen verfolgen und in Ihren Code einfügen können (wenn Sie die gegabelte Version erstellt haben, möchten Sie die upstreamFernbedienung wahrscheinlich als hinzufügen Gut).

Brian Campbell
quelle
Möglicherweise möchten Sie nicht wirklich gabeln, wenn er, wie auf dem Originalplakat angegeben, manchmal stattdessen etwas Arbeit speichern möchte, ohne einen Link zum Original zu haben.
Adam Dymitruk
1
@adymitruk Nein, das OP erwähnte, dass er manchmal das Upstream-Repo klont, ohne es zu gabeln, aber danach wieder einen Beitrag leisten möchte. Er erwähnte ausdrücklich, dass er seine Änderungen auf eine gegabelte Version von Rails übertragen möchte. Er sagte nichts darüber, Arbeit ohne Verbindung zum Original retten zu wollen.
Brian Campbell
Vielleicht möchte er einen Beitrag zum eigentlichen Projekt leisten, wenn er sich nicht teilen will ... so unwahrscheinlich das auch ist.
Adam Dymitruk
Vielen Dank für die Antwort und Entschuldigung für die Verzögerung meinerseits. Wie gesagt habe ich keine Gabelschienen. Ich habe nur einen Klon von Schienen. Ihre Antwort geht jedoch davon aus, dass ich zuerst die Schienen gegabelt habe. Habe ich das richtig verstanden?
Nick Vanderbilt
4
@ Nadal Meine Antwort geht nicht davon aus, dass Sie bereits eine Gabel erstellt haben. Meine Antwort erklärt, wie Sie eine Situation, in der Sie gerade ein Repo geklont haben, in eine Situation konvertieren, in der Sie Ihre Änderungen von Ihrem lokalen Repo in eine Gabelung verschieben können. Durch das Forken eines Repos auf GitHub wird lediglich eine Kopie auf dem Server erstellt, auf die Sie einen Push ausführen können. Sobald Sie dies getan haben, zeigen Ihnen meine Anweisungen, wie Sie auf das von Ihnen erstellte lokale Repo zeigen, das derzeit auf das offizielle Rails-Repo verweist, und stattdessen auf Ihre Gabel. Ich habe ein Diagramm hinzugefügt, um anzuzeigen, was los ist. Ich hoffe das hilft, lass es mich wissen, wenn du weitere Fragen hast.
Brian Campbell
3

Eine sehr einfache Möglichkeit, vom geklonten in den gegabelten Modus zu wechseln, ist die Verwendung des hubWrappers von http://hub.github.com/ .

Wenn dies installiert ist, führen Sie es einfach aus

hub fork

aus Ihrem schreibgeschützten Klon heraus.

Stefan Armbruster
quelle
Funktioniert gut. Die Gabel wird mit demselben Remote-Namen wie Ihr Github-Benutzername erstellt.
Zitrax
1

Es sollte keine Rolle spielen. Wenn Sie möchten, können Sie eine weitere Fernbedienung hinzufügen und Ihr nicht gegabeltes Repo angeben. Schieben Sie Ihre Änderungen darauf.

Adam Dymitruk
quelle
Wie füge ich eine weitere Fernbedienung hinzu? Es tut uns leid. Neuling in der Welt.
Nick Vanderbilt
1
Sie können später gabeln und dann zu Ihrem gegabelten Repo drücken ... falls Sie noch nicht gegabelt haben. Forking macht Sie Ihre eigene "Kopie" des Repositorys, an dem Sie interessiert sind.
Adam Dymitruk
Im Moment kannst du einfach ein neues Repo auf Github machen. Fügen Sie es als Fernbedienung zu der hinzu, die Sie aus dem Rails-Repo geklont haben, und drücken Sie es nur auf Ihre neue. Ich denke, das ist es, wonach du suchst. Kein Gabeln notwendig.
Adam Dymitruk
1
Git Remote hinzufügen Myrepo Git: //github.com/myid/mynotforkedrepo.git
Adam Dymitruk
Hast du dir schon ein Repo auf Github (oder anderswo) erstellt?
Adam Dymitruk
0

Wenn Sie nicht verzweigen möchten und abhängig vom Wartungsteam, können Sie einen Patch erstellen und an diese senden. Im Allgemeinen würden Sie Ihr Repo jedoch entweder auf Github verfügbar machen, wie in anderen Kommentaren erläutert, oder auf Ihrem eigenen Git-Repo, und den Betreuern des ursprünglichen Repos die Informationen für Ihr Repo und Ihren Zweig zur Verfügung stellen, in die sie zusammengeführt werden sollen.

Svenito
quelle
1
Ich verstehe nicht, warum man sowieso nicht gabeln möchte, da es nur eine einfache Gabel ist! Es ist keine ganz neue Version des Projekts - nur Ihre Kopie des Quellcodes, von dem Sie hoffen, dass er zusammengeführt wird. Genau wie eine Patch-Serie.
Alternative
1
Könnte sein, dass die Person keinen Github-Account hat, aber dennoch einen Beitrag zum Projekt leisten möchte. Sie können das Projekt klonen, Patches bearbeiten oder entweder oder ihren Zweig zur Aufnahme an das ursprüngliche Projekt senden. Aber es gibt keinen wirklichen Grund, nicht zu gabeln, wenn Sie können.
Svenito