Klonen eines Repos aus dem Github eines anderen und Verschieben in ein Repo auf meinem Github

74

Ich habe das Repo unter https://github.com/railstutorial/sample_app_rails_4 geklont und viele Änderungen daran vorgenommen (ich habe es als Ausgangspunkt für meine eigene App verwendet), und jetzt möchte ich die geänderte App auf a verschieben Repo auf meinem eigenen Github-Konto.

Wie kann ich ändern, mit welchem ​​Github-Repo es verknüpft ist?

jackerman09
quelle

Antworten:

119

Wie Deefour sagt, ist Ihre Situation nicht viel anders als die unter Ändern des URI (URL) für ein entferntes Git-Repository . Wenn Sie cloneein Repository haben, wird es als eines remotevon Ihnen unter dem Namen hinzugefügt origin. Was Sie jetzt tun müssen (da Sie die alte Quelle nicht mehr verwenden), ist die originURL der Änderung :

$ git remote set-url origin http://github.com/YOU/YOUR_REPO

Wenn das ursprüngliche Repository häufig aktualisiert wird und Sie diese Aktualisierungen von Zeit zu Zeit erhalten möchten, sollten Sie anstelle der Bearbeitung originein neues hinzufügen remote:

$ git remote add personal http://github.com/YOU/YOUR_REPO

Oder vielleicht sogar den alten anrufen upstream:

$ git remote rename origin upstream
$ git remote add origin http://github.com/YOU/YOUR_REPO

Wann immer Sie Änderungen erhalten möchten upstream, können Sie Folgendes tun:

$ git fetch upstream

Da dies die Quelle ein Beispiel-Repository ist (scheint eine Art Vorlage zu sein, um anzufangen), glaube ich nicht, dass es notwendig ist, sie zu behalten oder überhaupt zu teilen - ich werde hier mit der ersten Alternative fortfahren.

mgarciaisaia
quelle
Ich habe dies ursprünglich getan (ich habe beide Optionen zu unterschiedlichen Zeiten ausprobiert), aber es wurde immer wieder die Fehlermeldung angezeigt, dass ich keinen Zugriff hatte (ich kenne die genaue Meldung nicht b / c Ich bin gerade nicht an meinem Computer, aber ich kann später hinzugefügt werden). Danke
jackerman09
@ jackerman09: Wann immer du kannst, gib bitte die Fehlermeldung an, damit wir es herausfinden können.
mgarciaisaia
Hier ist die Fehlermeldung, die ich erhalte, wenn ich git push für ein vorhandenes Repo ausführe: Berechtigung verweigert (publickey). Schwerwiegend: Konnte nicht aus dem Remote-Repository lesen. Stellen Sie sicher, dass Sie über die richtigen Zugriffsrechte verfügen und das Repository vorhanden ist.
Jackerman09
1
@ jackerman09: Überprüfen Sie , ob der öffentliche Schlüssel an Ihr GitHub-Konto angehängt ist (oder lesen Sie die ganze Seite, wenn dies nicht hilft). Oder Sie können stattdessen versuchen , die HTTPS-Authentifizierung zu verwenden.
mgarciaisaia
Danke für die Hilfe! Die Antwort war, dass ich keinen SSH-Schlüssel auf dem Computer hatte, den ich benutzte. Hier sind die Seiten, auf denen ich alles herausgefunden habe: 1) help.github.com/articles/generating-ssh-keys UND 2) help.github.com/articles/error-permission-denied-publickey Nochmals vielen Dank!
Jackerman09
57

GitHub: git cloneDas Repository eines anderen und git pushIhr eigenes Repository

Ich werde das Repository eines anderen als das andere Repository bezeichnen .


  1. Erstellen Sie ein neues Repository auf github.com . (Dies ist Ihr Repository )

    • Geben Sie ihm den gleichen Namen wie dem anderen Repository .
    • Initialisieren Sie es nicht mit einer README, .gitignore oder Lizenz.
  2. Klonen Sie das andere Repository auf Ihren lokalen Computer. (falls Sie dies noch nicht getan haben)

    • git clone https://github.com/other-account/other-repository.git
  3. Benennen Sie den aktuellen " Ursprung " des lokalen Repositorys in " Upstream " um.

    • git remote rename origin upstream
  4. Geben Sie dem lokalen Repository einen " Ursprung ", der auf Ihr Repository verweist .

    • git remote add origin https://github.com/your-account/your-repository.git
  5. Schieben Sie das lokale Repository in Ihr Repository auf Github.

    • git push origin master

Jetzt zeigt ' origin ' auf Ihr Repository und ' upstream ' auf das andere Repository .

  • Erstellen Sie mit einen neuen Zweig für Ihre Änderungen git checkout -b my-feature-branch.
  • Sie können git commitwie gewohnt in Ihr Repository .
  • Verwenden Sie git pull upstream masterdiese Option , um Änderungen aus dem anderen Repository in Ihren Hauptzweig zu übernehmen.
Derek Soike
quelle
1
Gut erklärt +1
Drenai
Können Sie angeben, wie Sie (zusätzlich zu den oben genannten) eine Pull-Anfrage an "das andere Repository" senden können? Dies würde es zu einem sehr hilfreichen Mini-Tutorial machen
Tanya Gupta
1
@TanyaGupta GitHub hat eine großartige Tutorial-Seite zum Erstellen einer Pull-Anfrage von einer Gabel .
Derek Soike
Ausgezeichnete Erklärung, kurz und einfach
Stryker
1
Schöne Erklärung, aber wenn git push origin masterich versuche zu bekommen:... Compressing objects: 100% (1093/1093), done. Writing objects: 100% (4185/4185), 504.89 KiB | 126.22 MiB/s, done. Total 4185 (delta 3049), reused 4185 (delta 3049) remote: Resolving deltas: 100% (3049/3049), done. remote: pre-receive.sh: execution exceeded 5s timeout To https://github.com/your-account/your-repository.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'https://github.com/your-account/your-repository.git'
user9074332
12

Git löschen und neu starten.

Ihr Zweck ist wahrscheinlich, dieses Repo auf Ihr zu setzen und es zu Ihrem zu machen.

Die Idee ist, das zu löschen .git/und neu zu initialisieren.

  1. Gehen Sie zu Ihrem geklonten Repo-Ordner rm -rf .git
  2. Initialisieren Sie es neu und fügen Sie dann Ihre Fernbedienung hinzu und machen Sie Ihren ersten Push.
    git init
    git add .
    git commit -m "your commit message"
    git remote add origin 
    git push origin master
    
MAOXU
quelle
Müssen Sie das .gitVerzeichnis überhaupt erst entfernen ? Willst git initdu es sowieso nicht auslöschen?
Mike Wise
1
@MikeWise: Nein, git init wird niemals Daten zerstören, wenn dort bereits ein Repo vorhanden ist, kann aber einige Einstellungen über die von Ihnen übergebenen Befehlszeilenargumente ändern, denke ich.
Agent Freitag,
8

Sie können dies tun, indem Sie eine neue Fernbedienung aus Ihrem lokalen Repository erstellen (über die Befehlszeile).

git remote add <name> <url>

dann können Sie anrufen:

git push <name> <repo_name>

Um die standardmäßig eingerichtete "Ursprungs" -Fernbedienung zu ersetzen, können Sie Folgendes ausführen:

git remote rm origin
git remote add origin <url>
bmorgan21
quelle
Ich habe dies ursprünglich getan, aber es wurde immer wieder die Fehlermeldung angezeigt, dass ich keinen Zugriff hatte (ich weiß nicht genau, ob ich gerade nicht an meinem Computer bin, aber ich kann sie später hinzufügen). Danke
jackerman09
Möglicherweise müssen Sie zuerst das Repository auf Ihrem Remote-Konto erstellen und dann diese URL verwenden, um die neue Remote zu konfigurieren.
bmorgan21
Dies war, was ich getan hatte (zuerst das Repo direkt auf github.com erstellen). Ich habe das lokale Repo (git init) neu initialisiert, das Remote (rm origin) entfernt und den Ursprung neu hinzugefügt. Das alles hat funktioniert, aber als ich versuchte, zum Repo zu pushen, bekam ich den 'Fatal Error' mit der Aufschrift 'Access Denied'
jackerman09
Versuchen Sie, "git config --list" auszuführen, und stellen Sie sicher, dass Sie den richtigen Benutzer und die richtigen Fernbedienungen verwenden.
bmorgan21
Ich habe git config --list ausgeführt und der Benutzername, die E-Mail und die Fernbedienung sind korrekt. Wie kann ich bestätigen, dass mein Passwort korrekt gespeichert ist? Kann ich das Passwort erneut eingeben?
Jackerman09
7

Ich denke, dass der "höflichste Weg" dazu wäre:

  1. Fork das ursprüngliche Repo auf Ihrem GitHub-Konto
  2. Kasse einen neuen Zweig für deine Änderungen aus git checkout -b <your_branch_name>(falls du das vorher nicht getan hast)
  3. Fügen Sie eine neue Fernbedienung für Ihr lokales Repository hinzu: git remote add github <your_repository_ssh_url>
  4. Schieben Sie Ihren schönen neuen Zweig in Ihr Github-Repository: git push github <your_branch_name>

Auf diese Weise erhalten Sie ein Repo, das mit dem ursprünglichen Repo verknüpft ist, wobei Ihre Änderungen in einem separaten Zweig festgeschrieben werden. Dieser Weg ist einfacher, wenn Sie eine Pull-Anfrage an das ursprüngliche Repo senden möchten.

llekn
quelle
1
Ich habe eine Minute gebraucht, um festzustellen, dass githubin dieser Anleitung das Bit normalerweise als bezeichnet wird origin. Ansonsten unkompliziert und einfach.
Leanne
1

Von Git genommen schieben Sie alles auf einen neuen Ursprung

Grundsätzlich müssen Sie Ihrem Ordner ein neues Repo zuordnen

git remote add origin <address>
git push origin <branchname>
Eric C.
quelle
1
originist bereits vorhanden - man muss rm, renameoder set-urles.
mgarciaisaia
0

Ich hatte eine ähnliche Situation, aber in meinem Fall musste ich nur, wie vorgeschlagen, aber mit https wie folgt :

$ git remote set-url origin https://github.com/YOU/YOUR_REPO

user3685927
quelle
0

Kopieren Sie nach dem Klonen die Dateien aus ihrem Ordner in einen neuen und beginnen Sie erneut mit git init.

Ich hatte ein ähnliches Problem: Ich musste das Ordnerverzeichnis ändern, bevor ich die Änderungen an meinem Repo vornehmen konnte.

oder Sie können den aktuellen Repository-Ursprung mit dem Befehl git remote remove origin entfernen.

FX Blankson
quelle