645 Stimmen

Git Push bestehenden Repo zu einem neuen und anderen Remote-Repo-Server?

Angenommen, ich habe ein Repository auf git.fedorahosted.org und ich möchte dies in mein Konto bei github klonen, um meine eigene Spielwiese neben dem "offiziellen" Repo auf fedorahosted zu haben. Was wären die Schritte, um das zunächst rüber zu kopieren? Innerhalb github gibt es diese nette "fork" Schaltfläche, aber ich kann nicht verwenden Sie diese aus offensichtlichen Gründen.

Und wie würde ich Änderungen in der fedorahhosted Repo in der github ein verfolgen?

939voto

troelskn Punkte 110542
  1. Erstellen Sie ein neues Repo auf Github.
  2. Klonen Sie das Repo von fedorahosted auf Ihren lokalen Rechner.
  3. git remote rename origin upstream
  4. git remote add origin URL_TO_GITHUB_REPO
  5. git push origin master

Jetzt können Sie damit arbeiten wie mit jedem anderen Github-Repository. Um Patches von Upstream einzubinden, führen Sie einfach git pull upstream master && git push origin master .

28 Stimmen

Es gibt keinen Grund, den ursprünglichen Ursprung umzubenennen, nennen Sie den neuen Spielplatz einfach anders.

43 Stimmen

@tcaswell Technisch gesehen nicht, aber es ist eine starke Konvention, dass origin zeigt auf den kanonischen entfernten Standort. In diesem Fall wäre der Github-Standort vermutlich der kanonische Standort.

1 Stimmen

Ich würde "stromaufwärts" als den kanonischen Ort betrachten, aber ich denke, das ist Haarspalterei.

141voto

mob Punkte 113680

Es gibt eine gelöschte Antwort auf diese Frage, die einen nützlichen Link enthielt: 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

Beispiel aus dem OP:

Auf Ihrem lokalen Rechner

$ 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

10 Stimmen

Was ist der Vorteil des bloßen Klons und des Mirror-Push gegenüber dem einfachen Hinzufügen und Verschieben auf eine andere Fernbedienung? Ist es, dass alle Zweige gepusht werden und nicht nur der aktuelle Zweig? (Wenn ja, scheint dies eine Einschränkung der akzeptierten Antwort zu sein, die beachtet werden sollte).

3 Stimmen

Das war genau die Info, nach der ich gesucht habe, die --bare / --mirror ist normalerweise das, was die Leute machen wollen! Dies ist eine wichtige Antwort! Vielen Dank

2 Stimmen

Großartig! Definitiv die richtigste Antwort zum Thema Frage. Danke dafür! Wenn ich es nicht so mache, bekomme ich immer error: failed to push some refs to 'https://github.com/username/testrep.git'

69voto

kenorb Punkte 134883

Um Ihr bestehendes Repo in different zu pushen, müssen Sie das tun:

  1. Klonen Sie zunächst das Original-Repository.

    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 ändern master:mastersource:destination Zweigstelle.


Wenn Sie einen bestimmten Commit (Branch) pushen wollen, dann tun Sie das:

  1. Erstellen Sie im ursprünglichen Projektarchiv einen neuen Zweig und checken Sie ihn aus:

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

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

    Alternativ können Sie die Übergabe auch mit git cherry-pick an den bestehenden HEAD anzuhängen.

  3. Dann pushen Sie zu Ihrem neuen Repo:

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

    Wenn Sie ein Rebasing durchführen, verwenden Sie -f für Force Push (nicht empfohlen). ausführen git reflog um die Historie der Änderungen zu sehen.

3 Stimmen

Die git push ... old_branch_name:new_branch_name ermöglicht es Ihnen, einen Funktionszweig aus dem alten Repository als Hauptzweig in das neue Repository zu verschieben. Nützlich!

0 Stimmen

Das war für mich der einfachste Weg.

42voto

Kamil Nękanowicz Punkte 5586

Wenn Sie ein bestehendes 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

6 Stimmen

Nur um das klarzustellen, --all wird alle Zweige verschieben

2 Stimmen

Großartige, sehr einfache Methode, um ein lokales Repository auf ein entferntes zu kopieren. Danke! Stellen Sie sicher, dass der entfernte Ordner mit einem Git-Repository existiert. Ich habe git init --bare auf dem entfernten Server verwendet.

26voto

Mobiletainment Punkte 19778

Ich habe eine Lösung gefunden mit set-url das ist prägnant und relativ leicht zu verstehen :

  1. ein neues Repo auf Github erstellen
  2. cd in das bestehende Repository auf Ihrem lokalen Rechner (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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X