Github fügt ein Repository als Fork aus einem vorhandenen Klon hinzu

21

Ich habe also ein Git-Repository, das ich von einer Upstream-Quelle auf Ghithub geklont habe. Ich habe ein paar Änderungen daran vorgenommen (die nicht festgeschrieben sind und im Hauptzweig liegen). Was ich tun möchte, ist, meine Änderungen als neuen Zweig auf meine Github-Seite zu übertragen und Github immer noch als Gabel sehen zu lassen.

Ist das möglich? Ich bin ziemlich neu in Sachen GitHub. Hat meine Frage überhaupt Sinn ergeben?

Der einfachste Weg, den ich mir vorstellen kann (und ich bin mir sicher, dass dies der am weitesten verbreitete ist), ist es, das Repo auf Github zu verteilen. Klonen Sie es lokal in ein anderes Verzeichnis. Fügen Sie das Upstream-Origin-Repo hinzu. Erstellen Sie einen Zweig in diesem neuen gespaltenen Repo. Kopieren Sie meine Codeänderungen von Hand in das neue lokale Repo. Und dann schiebe es zurück zu meinem Github.

Ist dies ein häufiger Anwendungsfall, bei dem es einfacher ist, Verzeichnisse zu duplizieren?

Ich schätze, ich frage hier im Gegensatz zu SO, da ich unter Linux Kommandozeilengit verwende und die Leute hier bessere Antworten geben.

Falmarri
quelle
Ich denke, dies ist technisch gesehen ein aktuelles Thema, aber es könnte anderswo besser sein, da es sich anscheinend hauptsächlich um eine Github-Frage handelt
Michael Mrozek

Antworten:

22

Sie können alles von Ihrem vorhandenen Repository aus erledigen (Sie müssen den Zweig nicht in ein neues (lokales) Repository klonen, Ihren Zweig erstellen, Ihre Commits / Änderungen kopieren usw.).

  1. Bereiten Sie Ihre Commits für die Veröffentlichung vor.

    Verfeinern Sie vorhandene lokale Commits (z. B. mit git commit --amendund / oder git rebase --interactive).

    Übernehmen Sie alle nicht festgeschriebenen Änderungen, die Sie veröffentlichen möchten (ich bin mir nicht sicher, ob Sie implizieren wollten, dass Sie einige Festschreibungen für Ihren lokalen Master und einige nicht festgeschriebene Änderungen oder nur einige nicht festgeschriebene Änderungen vorgenommen haben Zweig ”, sie sind ausschließlich in Ihrem Arbeitsbaum).

    Benennen Sie Ihre Master - Zweig , um ihn zu geben , den Namen , den Sie für Ihre „Niederlassung“ wollen. Dies ist nicht unbedingt erforderlich (Sie können von einem Zweig zu einem anderen Zweig pushen), aber es wird wahrscheinlich langfristig Verwirrung stiften, wenn Ihr lokaler Zweig und der Zweig in Ihrem GitHub-Zweig den gleichen Namen haben.

    git branch -m master my-feature
    
  2. Verzweigen Sie das vorgelagerte GitHub-Repository
    (zB) github.com:UpstreamOwner/repostory_name.gitals
    (zB) github.com:YourUser/repository_name.git.

    Dies geschieht auf der GitHub-Website (oder auf einem „Client“, der die GitHub-APIs verwendet). Es sind keine lokalen Git-Befehle beteiligt.

  3. Fügen Sie in Ihrem lokalen Repository (das ursprünglich aus dem vorgelagerten GitHub-Repository geklont wurde und Ihre Änderungen im Master hat ) Ihr Fork-Repository als Remote hinzu:

    git remote add -f github github.com:YourUser/repository_name.git
    
  4. Verschieben Sie Ihren Zweig in Ihr Fork-Repository auf GitHub.

    git push github my-feature
    
  5. Benennen Sie die Fernbedienungen optional um, sodass Ihre Gabel als "Ursprung" und der Upstream als "Upstream" bezeichnet wird.

    git remote rename origin upstream
    git remote rename github origin
    

    Ein Grund, die Fernbedienungen umzubenennen, ist, dass Sie sie verwenden möchten, git pushohne ein Repository anzugeben (standardmäßig ist dies "Ursprung").

Chris Johnsen
quelle
Funktionierte einwandfrei, aber wenn Sie die Github-Fernbedienung erstellen, vermissen Sie vermutlich das "https: //" in der Github-URL
jesjimher
1
@jesjimher: Die "URLs" in diesem Beitrag verwenden die "SCP-ähnliche Syntax" , die SSH und nicht HTTP (S) verwendet. Sie müssten auch den Doppelpunkt in einen Schrägstrich ändern, um sie als HTTP (S) -URLs zu verwenden (vorausgesetzt, der Server unterstützt beide ohne zusätzliche Namespace-Änderungen, die GitHub vornimmt).
Chris Johnsen
Hoppla, Sie haben Recht, Chris, ich habe den Doppelpunkt als Schrägstrich getippt und daher hat es bei mir nur funktioniert, wenn ich "https" hinzugefügt habe. Entschuldigung für den Lärm ...
jesjimher
In Schritt 4 mit -uOption Ihre örtliche Filiale machen my-feature Tracking der gleichen Fernbedienung Zweig origin/my-feature. Der Befehl lautet:git push -u github my-feature
YaOzI
Das ist großartig. Das einzige, was ich ändern musste, war die Github-Adresse!
Tico
0

Es gibt ein Werkzeug: hub

hubist ein Befehlszeilenprogramm, das gitum zusätzliche Funktionen und Befehle erweitert wird, die die Arbeit mit GitHub erleichtern

Jetzt kannst du:

# cd to a cloned repo with uncommited changes
git checkout -b feature
git commit -am 'done with feature'
git fork
git push YOUR_USER feature
# git pull-request
Evgeny Vereshchagin
quelle