Wie dupliziere ich ein Git-Repository? (ohne Gabelung)

115

Ich habe zwei Repositorys und muss das gesamte Repository auf das andere leere kopieren, das andere Zugriffsebenen als das erste hat. Die Kopie und das Mutter-Repository sollten nicht miteinander verknüpft werden.

Ich bin neu in Git und es wäre großartig, wenn mir jemand dabei helfen könnte.

Cowboy Bebop
quelle
5
Ich bin mir nicht sicher, aber ich denke, Sie könnten es einfach klonen und dann git config remote.origin.url verwenden. git: //new.url/proj.git, um die remote.origin auf Ihren neuen Repräsentanten einzustellen.
Rufinus
ya der Link, den ich gerade gepostet habe, macht so etwas.
nbz
@ Rudinus Ich habe genau das getan. Vielen Dank.
Cowboybebop

Antworten:

203

Siehe https://help.github.com/articles/duplicating-a-repository

Kurzfassung:

Um ein genaues Duplikat zu erstellen, müssen Sie sowohl einen Bare-Clone- als auch einen Mirror-Push ausführen:

mkdir foo; cd foo 
# move to a scratch dir

git clone --bare https://github.com/exampleuser/old-repository.git
# Make a bare clone of the repository

cd old-repository.git
git push --mirror https://github.com/exampleuser/new-repository.git
# Mirror-push to the new repository

cd ..
rm -rf old-repository.git  
# Remove our temporary local repository

HINWEIS: Das Obige funktioniert gut mit jedem Remote-Git-Repo. Die Anweisungen sind nicht spezifisch für Github

Das obige erstellt eine neue Remote-Kopie des Repos. Klonen Sie es dann auf Ihre Arbeitsmaschine.

Larry K.
quelle
2
Was passiert, wenn das alte und das neue Repository denselben Namen haben (nicht dieselbe Git-URL)? Wie in Ich Jeremy.gitJeremy.git
klone
Dies ist kein genaues Duplikat. Probleme werden nicht übertragen.
Slam
Bewahrt dies die Geschichte?
Thomas
@ Thomas Ich habe das gerade gemacht und ja, es hat meine gesamte Geschichte in der Kopie bewahrt. Beachten Sie, dass nach dem
Drücken und Einlegen
7
Damit diese Antwort mit GitHub funktioniert, muss zuerst das neue Repository auf GitHub erstellt werden.
Alex Holcombe
22

Sie können auch git-copy verwenden .

Installiere es mit Gem,

gem install git-copy

Dann

git copy https://github.com/exampleuser/old-repository.git \
    https://github.com/exampleuser/new-repository.git
Quanlong
quelle
1
Wie installierst du gem überhaupt? Dies scheint die problemloseste Lösung zu sein. Upvoted!
Saran3h
Es ist normalerweise Teil einer Ruby-Installation. Auf Ubuntu tun sudo apt install ruby.
Schaden
9

Wenn Sie nach GitHub kopieren, können Sie den GitHub-Importer verwenden, um dies für Sie zu tun. Das ursprüngliche Repo kann sogar von anderen Versionskontrollsystemen stammen.

Mateus Gondim
quelle
4
Dies funktioniert perfekt und hält sogar die Geschichte - sollte höher bewertet werden
John D
1
Genau. Dieser Ansatz ist viel intuitiver, er kann vollständig über die Github-Benutzeroberfläche ausgeführt werden und beinhaltet keinen dieser verwirrenden Befehlszeilen-Unsinn. Schritte: 1) Erstellen Sie in der GUI das neue Repo, aber aktivieren Sie nicht das Kontrollkästchen "Dieses Repository mit einer README-Datei initialisieren". Anschließend zeigt Github eine neue Seite und eine Option mit der Bezeichnung "..." an oder importiert Code aus ein anderes Repository. " Das ist es!
Luke F.
5

Wenn Sie nur ein neues Repository erstellen möchten, indem Sie alle oder die meisten Dateien aus einer vorhandenen Datei (dh als eine Art Vorlage) verwenden, ist es für mich am einfachsten, ein neues Repo mit dem gewünschten Namen usw. zu erstellen und es zu klonen Fügen Sie dann einfach die gewünschten Dateien und Ordner hinzu.

Sie erhalten nicht die gesamte Geschichte usw., aber in diesem Fall möchten Sie das wahrscheinlich nicht.

tim
quelle
-1

Terminal öffnen.

Erstellen Sie einen nackten Klon des Repositorys.

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

Mirror-push to the new repository.

cd old-repository.git

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

Kundan Roy
quelle
Ich habe deinen Ansatz ausprobiert. Und ich habe diese Fehlermeldung bekommen :! [remote abgelehnt] master -> master (Hook vor dem Empfang abgelehnt) und mehrere andere ähnliche Nachrichten. Der letzte war: Fehler: Einige Refs konnten nicht gepusht werden. Wie kann ich das korrigieren?
LND