Git vorhandenes Repo auf einen neuen und anderen Remote-Repo-Server schieben?

494

Angenommen, ich habe ein Repository auf git.fedorahosted.org und möchte dieses in mein Konto bei github klonen, um neben dem "offiziellen" Repo auf fedorahosted einen eigenen Spielplatz zu haben. Was wären die Schritte, um das zunächst zu kopieren? In Github gibt es diesen schönen "Gabel" -Button, aber ich kann ihn aus offensichtlichen Gründen nicht verwenden.

Und wie würde ich Änderungen im Fedorahosted-Repo im Github-Repo verfolgen?

Heiko Rupp
quelle

Antworten:

751
  1. Erstellen Sie ein neues Repo bei Github.
  2. Klonen Sie das Repo von Fedorahosted auf Ihren lokalen Computer.
  3. git remote rename origin upstream
  4. git remote add origin URL_TO_GITHUB_REPO
  5. git push origin master

Jetzt können Sie wie bei jedem anderen Github-Repo damit arbeiten. Um Patches von Upstream zu ziehen, führen Sie einfach aus git pull upstream master && git push origin master.

troelskn
quelle
14
Es gibt keinen Grund, den ursprünglichen Ursprung umzubenennen. Nennen Sie den neuen Spielplatz einfach etwas anderes.
Tacaswell
34
@tcaswell Technisch gesehen nein, aber es ist eine starke Konvention, die originauf den kanonischen entfernten Ort hinweist. In diesem Fall wäre der Github-Ort vermutlich der kanonische.
Troelskn
1
Ich würde "stromaufwärts" als den kanonischen Ort betrachten, aber ich denke, dies beginnt, Haare zu spalten.
Tacaswell
3
Vielleicht sollte ich eine andere Frage stellen, aber ich denke, ihr diskutiert, was ich will. Ich möchte eine neue Fernbedienung hinzufügen und nicht die vorhandene ersetzen, damit ich weiterhin aus dem alten Repository ziehen, aber alle Änderungen an der neuen vornehmen kann.
ThatAintWorking
13
@ThatAintWorking Sie sollten wahrscheinlich eine neue Frage öffnen, aber kurz gesagt - Sie können mit dem Befehl eine beliebige Anzahl von Fernbedienungen hinzufügen git remote add. Sie können dann zu einem von ihnen wechseln, indem Sie die Fernbedienung explizit angeben git push. ZB git push foobar masterum den aktuellen Zweig masterauf Remote zu schieben foobar.
Troelskn
108

Es gibt eine gelöschte Antwort auf diese Frage, die einen nützlichen Link hatte: https://help.github.com/articles/duplicating-a-repository

Das Wesentliche ist

0. create the new empty repository (say, on github)
1. make a bare clone of the repository in some temporary location
2. change to the temporary location
3. perform a mirror-push to the new repository
4. change to another location and delete the temporary location

OPs Beispiel:

Auf Ihrem lokalen Computer

$ cd $HOME
$ git clone --bare https://git.fedorahosted.org/the/path/to/my_repo.git
$ cd my_repo.git
$ git push --mirror https://github.com/my_username/my_repo.git
$ cd ..
$ rm -rf my_repo.git
Mob
quelle
5
Was ist der Vorteil des bloßen Klons und des Spiegel-Push-Over, wenn Sie einfach eine andere Fernbedienung hinzufügen und auf diese schieben? Werden alle Zweige verschoben und nicht nur der aktuelle Zweig? (Wenn ja, scheint dies eine Einschränkung der akzeptierten Antwort zu sein, die beachtet werden sollte.)
yoyo
3
Dies war genau die Information, nach der ich gesucht habe. Der --bare / - Spiegel ist normalerweise das, was die Leute machen wollen! Dies ist eine wichtige Antwort! Danke
Claf
1
Großartig! Auf jeden Fall die richtigste Antwort auf die Themenfrage. Vielen Dank! Wenn ich es nicht so mache, bekomme ich immererror: failed to push some refs to 'https://github.com/username/testrep.git'
Denis Babarykin
45

Um Ihr bestehendes Repo in ein anderes zu verschieben, müssen Sie:

  1. Klonen Sie zuerst das Original-Repo.

    git clone https://git.fedorahosted.org/cgit/rhq/rhq.git
    
  2. Verschieben Sie die geklonten Quellen in Ihr neues Repository:

    cd rhq
    git push https://github.com/user/example master:master
    

Sie können master:masterin source:destinationZweig wechseln .


Wenn Sie ein bestimmtes Commit (Zweig) pushen möchten, gehen Sie wie folgt vor:

  1. Erstellen und checken Sie auf dem ursprünglichen Repo einen neuen Zweig aus:

    git checkout -b new_branch
    
  2. Wählen Sie und setzen Sie auf den Punkt zurück, mit dem Sie beginnen möchten:

    git log # Find the interesting hash
    git reset 4b62bdc9087bf33cc01d0462bf16bbf396369c81 --hard
    

    Alternativ können Sie das Commit auswählen, um es git cherry-pickan den vorhandenen HEAD anzuhängen.

  3. Dann schieben Sie zu Ihrem neuen Repo:

    git push https://github.com/user/example new_branch:master
    

    Wenn Sie neu gründen, verwenden Sie -ffür Force Push (nicht empfohlen). Ausführen git reflog, um den Änderungsverlauf anzuzeigen.

Kenorb
quelle
2
Mit git push ... old_branch_name:new_branch_namekönnen Sie einen Feature-Zweig aus dem alten Repository als Hauptzweig in das neue Repository verschieben. Nützlich!
Gorjanz
Dies war der einfachste Weg für mich, dies zu tun.
Adam
15

Möchten Sie Ihr lokales Repository (mit seinen lokalen Zweigen usw.) wirklich einfach auf die neue Fernbedienung verschieben oder möchten Sie die alte Fernbedienung (mit all ihren Zweigen, Tags usw.) wirklich auf die neue Fernbedienung spiegeln? Wenn letzteres der Fall ist, finden Sie hier einen großartigen Blog zum richtigen Spiegeln eines Git-Repositorys .

Ich empfehle Ihnen dringend, den Blog für einige sehr wichtige Details zu lesen, aber die Kurzversion lautet wie folgt:

Führen Sie in einem neuen Verzeichnis die folgenden Befehle aus:

git clone --mirror [email protected]/upstream-repository.git
cd upstream-repository.git
git push --mirror [email protected]/new-location.git
Hundehaare
quelle
Ich denke, das ist der Link: blog.plataformatec.com.br/2013/05/…
David
11

Versuchen Sie Folgendes: So verschieben Sie ein vollständiges Git-Repository

  1. Erstellen Sie ein lokales Repository im temporären Verzeichnis mit:

    Git Clone Temp-Dir

  2. Gehen Sie in das temporäre Verzeichnis.

  3. Um eine Liste der verschiedenen Zweige in ORI anzuzeigen, gehen Sie wie folgt vor:

    git branch -a
    
  4. Überprüfen Sie alle Zweige, die Sie von ORI nach NEW kopieren möchten, mit:

    git checkout branch-name
    
  5. Rufen Sie nun alle Tags von ORI ab mit:

    git fetch --tags
    
  6. Bevor Sie den nächsten Schritt ausführen, überprüfen Sie Ihre lokalen Tags und Zweige mit den folgenden Befehlen:

    git tag
    
    
    git branch -a
    
  7. Löschen Sie nun den Link zum ORI-Repository mit dem folgenden Befehl:

    git remote rm origin
    
  8. Verknüpfen Sie nun Ihr lokales Repository mit dem folgenden Befehl mit Ihrem neu erstellten NEUEN Repository:

    git remote add origin <url to NEW repo>
    
  9. Drücken Sie nun alle Ihre Zweige und Tags mit den folgenden Befehlen:

    git push origin --all
    
    
    git push --tags
    
  10. Sie haben jetzt eine vollständige Kopie von Ihrem ORI-Repo.

vm345
quelle
9

Ich habe eine Lösung mit set-url gefunden, die präzise und ziemlich einfach zu verstehen ist :

  1. Erstelle ein neues Repo bei Github
  2. cd in das vorhandene Repository auf Ihrem lokalen Computer (wenn Sie es noch nicht geklont haben, tun Sie dies zuerst)
  3. git remote set-url origin https://github.com/user/example.git
  4. git push -u origin master
Mobiletainment
quelle
9

Wenn Sie ein vorhandenes Git-Repository haben:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.com/newproject
git push -u origin --all
git push -u origin --tags
Kamil Nekanowicz
quelle
1
Nur um zu verdeutlichen, - alle werden alle Filialen schieben
GilCol
7

Zeigen Sie einfach auf das neue Repo, indem Sie die GIT-Repo-URL mit diesem Befehl ändern:

git remote set-url origin [new repo URL]

Beispiel: git remote set-url origin [email protected]:Batman/batmanRepoName.git

Jetzt ist Drücken und Ziehen mit dem neuen REPO verbunden.

Dann drücken Sie normal wie folgt:

git push -u origin master
Abdel Ourimchi
quelle
2

Ich hatte das gleiche Problem.

In meinem Fall habe ich, da ich das ursprüngliche Repository auf meinem lokalen Computer habe, eine Kopie in einem neuen Ordner ohne versteckte Datei (.git, .gitignore) erstellt.

Schließlich habe ich die .gitignore-Datei zum neu erstellten Ordner hinzugefügt.

Dann habe ich das neue Repository über den lokalen Pfad erstellt und hinzugefügt (in meinem Fall mit GitHub Desktop).

itrascastro
quelle
1

Hier ist eine manuelle Vorgehensweise git remote set-url origin [new repo URL]:

  1. Klonen Sie das Repository: git clone <old remote>
  2. Erstellen Sie ein GitHub-Repository
  3. Öffnen <repository>/.git/config

    $ git config -e
    
    [core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
    [remote "origin"]
        url = <old remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    

    und ändern Sie die Fernbedienung (die URL-Option)

    [remote "origin"]
        url = <new remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    
  4. Schieben Sie das Repository auf GitHub: git push

Sie können auch beide / mehrere Fernbedienungen verwenden .

upe
quelle
Ich suchte nach dem gleichen Problem und tat dann das gleiche und arbeitete aus.
Mohit Patidar