812 Stimmen

Lokales Git-Repository mit allen Zweigen und Tags auf neues Remote-Repository verschieben

Ich habe ein lokales Git Repo, das ich zu einem neuen Remote Repo pushen möchte (brandneues Repo, das auf Beanstalk eingerichtet wurde, falls das eine Rolle spielt).
Mein lokales Repository hat ein paar Zweige und Tags, und ich möchte meine gesamte Historie behalten.

Es sieht so aus, als müsste ich im Grunde nur eine git push hochgeladen, aber das lädt nur die master Zweigstelle.

Wie schiebe ich alles, so dass ich eine vollständige Replik meiner lokalen Repo auf dem Remote erhalten?

1286voto

cmcginty Punkte 106764

Zum Schieben alle Ihre Zweige verwenden Sie entweder (ersetzen Sie REMOTE durch den Namen der Fernbedienung, z. B. "origin"):

git push REMOTE '*:*'
git push REMOTE --all

Zum Schieben alle Ihre Tags :

git push REMOTE --tags

Schließlich können Sie das alles mit einem einzigen Befehl erledigen:

git push REMOTE --mirror

Darüber hinaus aber --mirror auch Ihre Fernbedienungen drücken, so dass dies vielleicht nicht genau das ist, was Sie wollen.

234voto

Daniel Punkte 22831

Falls Sie, wie ich, ein Repo erworben haben und nun den Remote-Ursprung auf ein anderes Repo, ein neues leeres Repo, umstellen...

Sie haben also Ihr Projektarchiv und alle darin enthaltenen Zweige, aber Sie müssen diese Zweige noch auschecken, um die git push --all Befehl, um diese auch tatsächlich zu drücken.

Sie sollten dies tun, bevor Sie pressen:

for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done

Gefolgt von

git push --all

113voto

Pieter Breed Punkte 5489

Hier ist eine andere Lösung, die in meiner Situation besser funktioniert hat. Es löst das Problem, wenn man mehr als eine Remote hat und alle Zweige in der Remote klonen möchte source zur Fernbedienung destination aber ohne sie alle vorher überprüfen zu müssen.

(Das Problem, das ich mit Daniels Lösung hatte, war, dass es sich weigerte, einen Tracking-Zweig aus dem source remote, wenn ich es zuvor bereits ausgecheckt hatte, d.h. mein lokaler Zweig würde vor dem Push nicht aktualisiert)

git push destination +refs/remotes/source/*:refs/heads/*

Anmerkung: Wenn Sie keine direkte CLI verwenden, müssen Sie die Sternchen ausblenden:

git push destination +refs/remotes/source/\*:refs/heads/\*

Dies wird alle Zweige in remote verschieben source zu einer Hauptniederlassung in destination und möglicherweise einen nicht-schnellen Vorwärtsstoß zu machen. Sie müssen die Tags immer noch separat schieben.

38voto

Michał Zalewski Punkte 2682

Ein Repository spiegeln

Erstellen Sie einen bloßen Klon des Repositorys.

git clone --bare https://github.com/exampleuser/old-repository.git

Spiegelung in das neue Repository.

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git

Entfernen Sie das temporäre lokale Repository, das Sie in Schritt 1 erstellt haben.

cd ..
rm -rf old-repository.git

Spiegeln eines Repositorys, das große Git-Dateispeicherobjekte enthält

Erstellen Sie einen bloßen Klon des Repositorys. Ersetzen Sie den Beispiel-Benutzernamen durch den Namen der Person oder Organisation, die Eigentümer des Repositorys ist, und ersetzen Sie den Beispiel-Repository-Namen durch den Namen des Repositorys, das Sie duplizieren möchten.

git clone --bare https://github.com/exampleuser/old-repository.git

Navigieren Sie zu dem Repository, das Sie gerade geklont haben.

cd old-repository.git

Ziehen Sie die Git Large File Storage-Objekte des Repositorys ein.

git lfs fetch --all

Spiegelung in das neue Repository.

git push --mirror https://github.com/exampleuser/new-repository.git

Übertragen Sie die Git Large File Storage-Objekte des Repositorys auf Ihren Mirror.

git lfs push --all https://github.com/exampleuser/new-repository.git

Entfernen Sie das temporäre lokale Repository, das Sie in Schritt 1 erstellt haben.

cd ..
rm -rf old-repository.git

Die obige Anleitung stammt aus der Github-Hilfe: https://help.github.com/articles/duplicating-a-repository/

29voto

ta.speot.is Punkte 26425

Dies ist der einfachste Weg, den ich gefunden habe, vorausgesetzt, das Ziel ist leer. Wechseln Sie zu einem leeren Ordner und dann:

# Note the period for cwd >>>>>>>>>>>>>>>>>>>>>>>> v
git clone --bare https://your-source-repo/repo.git .
git push --mirror https://your-destination-repo/repo.git

Stellvertreter https://... pour file:///your/repo usw. je nach Bedarf.

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